定义

Pygame会接受用户的各种操作(比如按键盘,移动鼠标等)产生事件。事件随时可能发生,而且量也可能会很大,Pygame的做法是把一系列的事件存放一个队列里,逐个的处理。

处理事件

  • pygame.event.get()
  • pygame.event.wait() —— pygame会等到发生一个时间才继续下去
  • pygame.event.poll() —— 一旦调用,它会根据现在的情形返回一个真实的事件,或者一个“什么都没有”

事件集



事件

产生途径

参数

详细描述

QUIT

用户按下关闭按钮

none

 

ATIVEEVENT

Pygame被激活或者隐藏

gain, state

 

KEYDOWN

键盘被按下

unicode, key, mod

key – 按下或者放开的键值,是一个数字,Pygame中可以使用K_xxx来表示,比如字母a就是K_a,还有K_SPACE和K_RETURN等。 mod – 包含了组合键信息,如果mod & KMOD_CTRL是真的话,表示用户同时按下了Ctrl键。类似的还有KMOD_SHIFT,KMOD_ALT。 unicode – 代表了按下键的Unicode值

KEYUP

键盘被放开

key, mod

 

MOUSEMOTION

鼠标移动

pos, rel, buttons

buttons – 一个含有三个数字的元组,三个值分别代表左键、中键和右键,1就是按下了 pos – 位置 rel – 代表了现在距离上次产生鼠标事件时的距离

MOUSEBUTTONDOWN

鼠标按下

pos, button

button – 这个值代表了哪个按键被操作 pos – 位置

MOUSEBUTTONUP

鼠标放开

pos, button

button – 这个值代表了哪个按键被操作 pos – 位置

JOYAXISMOTION

游戏手柄(Joystick or pad)移动

joy, axis, value

 

JOYBALLMOTION

游戏球(Joy ball)?移动

joy, axis, value

 

JOYHATMOTION

游戏手柄(Joystick)?移动

joy, axis, value

 

JOYBUTTONDOWN

游戏手柄按下

joy, button

 

JOYBUTTONUP

游戏手柄放开

joy, button

 

VIDEORESIZE

Pygame窗口缩放

size, w, h

 

VIDEOEXPOSE

Pygame窗口部分公开(expose)?

none

 

USEREVENT

触发了一个用户事件

code

 

事件过滤

并不是所有的事件都需要处理。我们使用**pygame.event.set_blocked(type)来完成。如果有好多事件需要过滤,可以传递一个列表,比如pygame.event.set_blocked([KEYDOWN, KEYUP]),如果你设置参数None,那么所有的事件有被打开了。与之相对的,我们使用pygame.event.set_allowed()**来设定允许的事件。

产生事件

通常玩家做什么,Pygame就产生对应的事件就可以了,不过有的时候我们需要模拟出一些事件来,比如录像回放的时候,我们就要把用户的操作再现一遍。

为了产生事件,必须先造一个出来,然后再传递它

y_event = pygame.event.Event(KEYDOWN, key=K_SPACE, mod=0, unicode=' ')

你也可以像下面这样写

my_event = pygame.event.Event(KEYDOWN, {"key":K_SPACE, "mod":0, "unicode":' '})
pygame.event.post(my_event)
tips:
  • Event():Event(type, dict) 或者 Event(type, **attributes)。
  • post(): 把新的事件放在事件队列的最后。