文章目录
- pygame.event详细解析
-
- 函数表
- **函数详解**
-
- **pygame.event.pump()**
- **pygame.event.get()**
- **pygame.event.poll()**
- **pygame.event.wait()**
- **pygame.event.peek()**
- **pygame.event.clear()**
- **pygame.event.event_name()**
- **pygame.event.set_blocked()**
- **pygame.event.set_allowed()**
- **pygame.event.get_blocked()**
- **pygame.event.set_grab()**
- **pygame.event.get_grab()**
- **pygame.event.post()**
- **pygame.event.Event()**
- **class pygame.event.EventType**
- **type**
- **__dict__**
pygame.event详细解析
用于处理事件与事件队列的 Pygame 模块。
函数表
函数 | 事件 |
---|---|
pygame.event.get() | 从队列中获取事件 |
pygame.event.poll() | 从队列中获取一个事件 |
pygame.event.wait() | 等待并从队列中获取一个事件 |
pygame.event.peek() | 检测某类型事件是否在队列中 |
pygame.event.clear() | 从队列中删除所有的事件 |
pygame.event.event_name() | 通过 id 获得该事件的字符串名字 |
pygame.event.set_blocked() | 控制哪些事件禁止进入队列 |
pygame.event.set_allowed() | 控制哪些事件允许进入队列 |
pygame.event.get_blocked() | 入队列检测某一类型的事件是否被禁止进 |
pygame.event.set_grab() | 控制输入设备与其他应用程序的共享 |
pygame.event.get_grab() | 检测程序是否共享输入设备 |
pygame.event.post() | 放置一个新的事件到队列中 |
pygame.event.Event() | 创建一个新的事件对象 |
pygame.event.EventType | 代表 SDL 事件的 Pygame 对象 |
pygame.event.pump() | 让 Pygame 内部自动处理事件 |
Pygame 通过事件队列控制所有的时间消息。该模块中的程序将帮你管理事件队列。输入队列很大程度依赖于 pygame 的display模块。如果 display 没有被初始化,显示模式没有被设置,那么事件队列就还没有开始真正工作。
常规的队列是由 pygame.event.EventType 定义的事件对象的组成,有多种方法来访问里边的事件对象:从简单的检测事件是否存在,到直接从栈中获取它们。
所有事件都有一个类型标识符,这个标识符对应的值定义在 NOEVENT 到 NUMEVENTS 之间(温馨提示:类似于 C 语言的宏定义,明白?)。用户可以自行定义事件,但类型标识符的值应该高于或等于 USEREVENT。
获取各种输入设备的状态,推荐你直接通过它们相应的模块(mouse,key 和 joystick)提供的函数访问,而不是通过事件队列; 如果你使用此函数,请记住,Pygame 需要通过一些方式与系统的窗口管理器和平台的其他部分进行通信。为了保持 Pygame 和系统同步,你需要调用 pygame.event.pump() 确保实时更新,你将在游戏的每次循环中调用这个函数。
事件队列提供了一些简单的过滤。通过阻止某些事件进入事件队列,可以略微提高游戏的性能(温馨提示:因为这样事件队列的尺寸就会小一些,所以说可以略微提升性能)。使用 pygame.event.set_allowed() 和 pygame.event.set_blocked() 来控制某些事件是否允许进入事件队列。默认所有事件都会进入事件队列。
事件子系统应该在主线程被调用。如果你希望从其他线程中投递事件消息进入事件队列,请使用 fastevent 包。
Joysticks(游戏手柄)只有在设备初始化后才会发送事件。
一个 EventType 事件对象包含一个事件类型标识符和一组成员数据(事件对象不包含方法,只有数据)。EventType 对象从 Python 的事件队列中获得,你也可以使用 pygame.event.Event() 函数创建自定义的新事件。
由于 SDL 的事件队列限制了事件数量的上限(标准的 SDL 1.2 限制为 128),所以当队列已满时,新的事件将会被扔掉。为了防止丢失事件消息,尤其是代表退出的输入事件(因为当用户点击退出按钮没有反应,往往会被认为“死机”了),你的程序必须定期检测事件,并对其进行处理。
为了加快事件队列的处理速度,可以使用 pygame.event.set_blocked() 函数阻止一些我们不关注的事件进入队列中。
所有的 EventType 实例对象都拥有一个事件类型标识符,属性名是 type。你也可以通过事件对象的 __dict__ 属性来完全访问其他属性。所有其他成员属性的值都是通过事件对象的字典来传递。
在做调试和实验时,你可以打印事件对象以及相应的类型和成员。来自系统的事件都有一个事件类型和对应的成员属性,下边是每个事件类型以及对应的成员属性列表: