4

使您的精灵响应 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())

关于它的一些问题:

  1. 这是响应鼠标点击的最佳方式吗?
  2. 如果鼠标在精灵上持续按下一段时间怎么办?我如何从中制作单个事件?
  3. 这是通知我所有精灵点击的合理方式吗?

提前致谢

4

1 回答 1

11

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

在检查您按下的鼠标按钮时,请使用事件的按钮属性。

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

这对于大型项目来说是个坏主意,因为它会产生难以发现的错误。最好将事件保存在一个地方。不过,较小的游戏,例如简单的街机游戏,使用探测风格可能更有意义。

于 2008-12-25T22:46:33.913 回答