मैं सोच रहा था कि स्प्राइट पर माउस क्लिक करने वाले कोड को कैसे लिखना है। उदाहरण के लिए:पायगम माउस पर क्लिक करने का पता लगाने
if #Function that checks for mouse clicked on Sprite:
print ("You have opened a chest!")
मैं सोच रहा था कि स्प्राइट पर माउस क्लिक करने वाले कोड को कैसे लिखना है। उदाहरण के लिए:पायगम माउस पर क्लिक करने का पता लगाने
if #Function that checks for mouse clicked on Sprite:
print ("You have opened a chest!")
The pygame documentation for mouse events is here। आप (यदि आवश्यक हो) के सहयोग से pygame.mouse.get_pressed
विधि का उपयोग कर सकते हैं। लेकिन कृपया मुख्य ईवेंट लूप के माध्यम से माउस क्लिक ईवेंट का उपयोग करें। घटना लूप बेहतर होने का कारण "लघु क्लिक" के कारण है। आप इन्हें सामान्य मशीनों पर नहीं देख सकते हैं, लेकिन ट्रैकपैड पर टैप-क्लिक का उपयोग करने वाले कंप्यूटरों में अत्यधिक छोटी क्लिक अवधि होती है। माउस घटनाओं का उपयोग करना इसे रोक देगा।
संपादित करें: करने के लिए पिक्सेल सही टकराव pygame.sprite.collide_rect()
their docs for sprites पर पाया का उपयोग करें।
मुझे लगता है कि आपके गेम में मुख्य लूप है, और आपके सभी sprites sprites
नामक एक सूची में हैं।
अपने मुख्य पाश में, सभी घटनाएं प्राप्त करें, और MOUSEBUTTONDOWN
या MOUSEBUTTONUP
ईवेंट की जांच करें।
while ... # your main loop
# get all events
ev = pygame.event.get()
# proceed events
for event in ev:
# handle MOUSEBUTTONUP
if event.type == pygame.MOUSEBUTTONUP:
pos = pygame.mouse.get_pos()
# get a list of all sprites that are under the mouse cursor
clicked_sprites = [s for s in sprites if s.rect.collidepoint(pos)]
# do something with the clicked sprites...
तो मूल रूप से आपको मुख्य रूप से मेनलोप के प्रत्येक पुनरावृत्ति पर एक क्लिक के लिए जांच करना होगा। आप mouse.get_pos() और rect.collidepoint() का उपयोग करना चाहेंगे।
पायगम घटना संचालित प्रोग्रामिंग की पेशकश नहीं करता है, उदाहरण के लिए cocos2d करता है।
माउस कर्सर की स्थिति और दबाए गए बटन की स्थिति की जांच करने का एक और तरीका होगा, लेकिन इस दृष्टिकोण में कुछ समस्याएं हैं।
if pygame.mouse.get_pressed()[0] and mysprite.rect.collidepoint(pygame.mouse.get_pos()):
print ("You have opened a chest!")
अगर आप इस मामले को संभाला झंडा किसी तरह का, पेश करने के बाद से अन्यथा इस कोड को प्रिंट होगा होगा "आप एक छाती खोला है!" मुख्य पाश के हर पुनरावृत्ति।
handled = False
while ... // your loop
if pygame.mouse.get_pressed()[0] and mysprite.rect.collidepoint(pygame.mouse.get_pos()) and not handled:
print ("You have opened a chest!")
handled = pygame.mouse.get_pressed()[0]
बेशक आप Sprite
उपवर्ग और एक विधि is_clicked
इस तरह कहा जाता है जोड़ सकते हैं:
class MySprite(Sprite):
...
def is_clicked(self):
return pygame.mouse.get_pressed()[0] and self.rect.collidepoint(pygame.mouse.get_pos())
इसलिए, यह पहला दृष्टिकोण IMHO उपयोग करने के लिए बेहतर है।
यह भी ध्यान रखें कि माउस की स्थिति भी घटना में 'event.pos' के अंतर्गत उपलब्ध है –
मैं इस सवाल का और भी बहुत सिर इस खरोंच के बाद एक ही जवाब के लिए देख रहा था जवाब मैं के साथ आया है:
#Python 3.4.3 with Pygame
import pygame
pygame.init()
pygame.display.set_caption('Crash!')
window = pygame.display.set_mode((300, 300))
running = True
# Draw Once
Rectplace = pygame.draw.rect(window, (255, 0, 0),(100, 100, 100, 100))
pygame.display.update()
# Main Loop
while running:
# Mouse position and button clicking.
pos = pygame.mouse.get_pos()
pressed1, pressed2, pressed3 = pygame.mouse.get_pressed()
# Check if the rect collided with the mouse pos
# and if the left mouse button was pressed.
if Rectplace.collidepoint(pos) and pressed1:
print("You have opened a chest!")
# Quit pygame.
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
मैं कैसे लागू होगा कि हालांकि स्प्राइट पर क्लिक करने के लिए? –
@ एलियासबेनेवेस मैंने पिक्सेल सही टकराव के साथ अपना जवाब संपादित किया। – jakebird451