Pygame | 2 - 事件

定义

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

处理事件

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

事件集

事件产生途径参数详细描述
QUIT用户按下关闭按钮none 
ATIVEEVENTPygame被激活或者隐藏gain, state 
KEYDOWN键盘被按下unicode, key, modkey – 按下或者放开的键值,是一个数字,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, buttonsbuttons – 一个含有三个数字的元组,三个值分别代表左键、中键和右键,1就是按下了 pos – 位置 rel – 代表了现在距离上次产生鼠标事件时的距离
MOUSEBUTTONDOWN鼠标按下pos, buttonbutton – 这个值代表了哪个按键被操作 pos – 位置
MOUSEBUTTONUP鼠标放开pos, buttonbutton – 这个值代表了哪个按键被操作 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 
VIDEORESIZEPygame窗口缩放size, w, h 
VIDEOEXPOSEPygame窗口部分公开(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(): 把新的事件放在事件队列的最后。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值