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

2024-04-29 06:41:56 发布

您现在位置:Python中文网/ 问答频道 /正文

在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. 这是一个合理的方式通知我的所有精灵的点击?

提前谢谢


Tags: 方法ineventfor标准gettype方式
1条回答
网友
1楼 · 发布于 2024-04-29 06:41:56

我通常给我的可点击对象一个点击函数,就像你的例子中那样。我将所有这些对象放在一个列表中,以便在调用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。最好把事情放在一个地方。不过,像简单的街机游戏这样的小游戏,使用探索风格可能更有意义。

相关问题 更多 >