Python 在PyGame中,我如何响应鼠标点击精灵?

Python 在PyGame中,我如何响应鼠标点击精灵?,python,pygame,Python,Pygame,在PyGame中,让精灵响应鼠标点击的标准方法是什么 在我的事件循环中,有一件事很简单: for event in pygame.event.get(): if event.type == pygame.QUIT: exit_game() [...] elif ( event.type == pygame.MOUSEBUTTONDOWN and pygame.mouse.get_pressed()[0]): for

在PyGame中,让精灵响应鼠标点击的标准方法是什么

在我的事件循环中,有一件事很简单:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        exit_game()
    [...]
    elif (  event.type == pygame.MOUSEBUTTONDOWN and
            pygame.mouse.get_pressed()[0]):
        for sprite in sprites:
            sprite.mouse_click(pygame.mouse.get_pos())
关于它的一些问题:

  • 这是响应鼠标点击的最佳方式吗
  • 如果鼠标停留在雪碧上一段时间怎么办?我怎样才能把它变成一个单一的事件呢
  • 这是一个合理的方式来通知我的所有精灵的点击

  • 提前感谢

    我通常会给我的可点击对象一个点击功能,就像你的例子一样。我将所有这些对象放在一个列表中,以便在调用click函数时进行迭代

    检查按下哪个鼠标按钮时,请使用事件的button属性

    import pygame
    from pygame.locals import * #This lets you use pygame's constants directly.
    
    for event in pygame.event.get():
        if event.type == MOUSEBUTTONDOWN:  #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code.
            if event.button == 1:
                for object in clickableObjectsList:
                    object.clickCheck(event.pos)
    
    我认为这是推荐的方法。单击只注册一次,因此它不会告诉您的精灵用户是否正在用按钮“拖动”。这可以通过一个布尔值轻松实现,该布尔值在MOUSEBUTTONDOWN事件中设置为true,在MOUSEBUTTONUP事件中设置为false。已对“可拖动”对象进行迭代以激活其函数。。。等等

    但是,如果您不想使用事件处理程序,可以让更新函数检查输入:

    pygame.mouse.get_pos() 
    pygame.mouse.get_pressed().
    

    这对于大型项目来说是个坏主意,因为它会产生难以发现的bug。最好只是把事情放在一个地方。小型游戏,如简单的街机游戏,使用探索式风格可能更有意义。

    谢谢。关于
    event.button==1
    部分,PyGame中没有常量而不是显式的1吗?我认为不需要它。1总是左边的按钮,2是中间的按钮,3是右边的按钮。即使鼠标只有两个按钮,3也是正确的。