事件类型
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() | 创建一个用户自定义的新事件 |