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)
  • Event():Event(type, dict) 或者 Event(type, **attributes)。
  • post(): 把新的事件放在事件队列的最后。

Original: https://blog.csdn.net/qq2499094166/article/details/120262023
Author: 头发献祭师QZQ
Title: Pygame | 2 – 事件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/784284/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球