gpt4 book ai didi

python - Pygame鼠标点击检测

转载 作者:IT老高 更新时间:2023-10-28 21:08:11 25 4
gpt4 key购买 nike

我想知道如何编写检测鼠标点击 Sprite 的代码。例如:

if #Function that checks for mouse clicked on Sprite:
print ("You have opened a chest!")

最佳答案

我假设你的游戏有一个主循环,并且你所有的 Sprite 都在一个名为 sprites 的列表中。

在您的主循环中,获取所有事件,并检查 MOUSEBUTTONDOWNMOUSEBUTTONUP 事件。

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...

所以基本上你必须在主循环的每次迭代中自己检查一个 Sprite 的点击。你会想要使用 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())

所以,恕我直言,最好使用第一种方法。

关于python - Pygame鼠标点击检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com