我不知道如何编写代码,将检测在精灵的鼠标点击。 例如:
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!")
我假设你的游戏有一个主循环,和所有的精灵都在一个叫做名单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() 。
Pygame中不提供事件驱动编程,因为如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())
所以,最好是使用第一种方法恕我直言。
鼠标事件Pygame的文档是在这里 。 您可以使用pygame.mouse.get_pressed
协同方法pygame.mouse.get_pos
(如果需要)。 但请通过主事件循环使用鼠标点击事件。 之所以事件循环最好是由于“短点击”。 你可能不会注意到这些正常的机器,但上的触控板使用自来水,点击电脑有过小点击时期。 使用鼠标事件将防止这一点。
编辑:要执行像素完美碰撞使用pygame.sprite.collide_rect()
上找到自己的文档的精灵 。
我一直在寻找同样的回答这个问题和许多挠头这之后,我想出了答案:
#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