如何响应PyGame中的精灵鼠标点击?

问题描述:

让你的精灵响应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 sprite in sprites: 
      sprite.mouse_click(pygame.mouse.get_pos()) 

关于它的一些问题:

  1. 这是响应鼠标点击的最好方法?
  2. 如果鼠标持续按住精灵一段时间会怎么样?我如何制作一个单独的事件?
  3. 这是一种合理的方式来通知所有我的精灵的点击?

在此先感谢

我经常给我的点击对象,点击功能,就像在你的榜样。我将所有这些对象放在列表中,以便在调用点击函数时轻松进行迭代。

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

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

这是一个较大的项目是一个坏主意,因为它可以创建硬找到错误。更好的是把事件保存在一个地方。较小的游戏,如简单的街机游戏,但使用探测风格可能会更有意义。

+0

谢谢。关于`event.button == 1`部分,在PyGame中是否没有常量而不是显式1? – 2008-12-26 14:29:26