pyygame 定义了一个专门用来处理事件的结构,即事件队列,该结构遵循遵循队列“先到先处理”的基本原则,通过事件队列,我们可以有序的、逐一的处理用户的操作(触发事件)。下述表格列出了 pygame 中常用的游戏事件:
| 事件 | 产生途径 | 参数 |
|---|---|---|
| QUIT | 用户按下关闭按钮 | none |
| ATIVEEVENT | Pygame被激活或者隐藏 | gain, state |
| KEYDOWN | 键盘被按下 | unicode, key, mod |
| KEYUP | 键盘被放开 | key, mod |
| MOUSEMOTION | 鼠标移动 | pos, rel, buttons |
| MOUSEBUTTONDOWN | 鼠标按下 | pos, button |
| MOUSEBUTTONUP | 鼠标放开 | pos, button |
| 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 |
当使用 SDL2 编译时,pygame 具有这些附加事件及其属性。
| 事件 | 产生途径 | 参数 |
|---|---|---|
| AUDIODEVICEADDED | 添加音频设备 | which, iscapture |
| AUDIODEVICEREMOVED | 移除音频设备 | which, iscapture |
| FINGERMOTION | 手指移动 | touch_id, finger_id, x, y, dx, dy |
| FINGERDOWN | 手指按下 | touch_id, finger_id, x, y, dx, dy |
| FINGERUP | 手指松开 | touch_id, finger_id, x, y, dx, dy |
| MOUSEWHEEL | 鼠标滚轮滑动 | which, flipped, x, y, touch |
| MULTIGESTURE | 手势 | touch_id, x, y, pinched, rotated, num_fingers |
| TEXTEDITING | 文本编辑 | text, start, length |
| TEXTINPUT | 文本输入 | text |
从 pygame 2.0.1 开始,有一组新的事件,称为窗口事件。
| 事件 | 描述 |
|---|---|
| WINDOWSHOWN | 窗口显示 |
| WINDOWHIDDEN | 窗口隐藏 |
| WINDOWEXPOSED | 窗口被外部事件所更新 |
| WINDOWMOVED | 窗口移动 |
| WINDOWRESIZED | 窗口大小改变 |
| WINDOWSIZECHANGED | 窗口大小改变 |
| WINDOWMINIMIZED | 窗口最小化 |
| WINDOWMAXIMIZED | 窗口最大化 |
| WINDOWRESTORED | 恢复窗口 |
| WINDOWENTER | 鼠标进入窗口 |
| WINDOWLEAVE | 鼠标离开窗口 |
| WINDOWFOCUSGAINED | 窗口得到焦点 |
| WINDOWFOCUSLOST | 窗口失去焦点 |
| WINDOWCLOSE | 关闭窗口 |
| WINDOWTAKEFOCUS | 窗口取得焦点 |
| WINDOWHITTEST | Window has a special hit test |
pygame.event 模块提供了处理事件队列的常用方法,如下表所示:
| 方法 | 说明 |
|---|---|
| pygame.event.get() | 从事件队列中获取一个事件,并从队列中删除该事件 |
| pygame.event.wait() | 阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态 |
| pygame.event.set_blocked() | 控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入 |
| pygame.event.set_allowed() | 控制哪些事件允许进入队列 |
| pygame.event.pump() | 调用该方法后,Pygame 会自动处理事件队列 |
| pygame.event.poll() | 会根据实际情形返回一个真实的事件,或者一个None |
| pygame.event.peek() | 检测某类型事件是否在队列中 |
| pygame.event.clear() | 从队列中清除所有的事件 |
| pygame.event.get_blocked() | 检测某一类型的事件是否被禁止进入队列 |
| pygame.event.post() | 放置一个新的事件到队列中 |
| pygame.event.Event() | 创建一个用户自定义的新事件 |



