Pygame中自定义事件处理的方法2-1
1 Pygame事件处理流程
Pygame中的事件处理流程如图1所示。
图1 Pygame中事件处理流程
系统事件包括鼠标事件和键盘事件等,当用户点击了鼠标或者键盘时,这些事件会自动被放入系统的事件队列中。用户自定义事件需要通过代码才能被放入事件队列中。Pygame程序从事件队列中取出事件,根据不同的事件进行不同的处理。
相关链接1 Pygame处理系统事件的方法请参考
《Pygame中监控键盘按键的方法》
《《Python游戏编程入门》注-第4章2》
2 自定义事件处理方法
Pygame处理自定义事件的步骤是首先创建自定义事件,之后将自定义事件放入事件队列中,最后处理该事件。
2.1 创建自定义事件
创建自定义事件的代码如图2所示。
图2 创建自定义事件的代码
其中,pygame.USEREVENT是自定义事件的起始值,如果定义多个事件,则在其值的基础上加上相应数字即可。
相关链接2 Pygame中最多可以定义pygame.NUMEVENTS个事件,其值是65535。
2.2 将自定义事件放入事件队列
通过pygame.time.set_timer()方法将自定义事件放入事件队列,代码如图3所示。
图3 将自定义事件放入事件队列的代码
pygame.time.set_timer()方法创建了一个定时器,每隔3000毫秒,就会把print_message这个事件放入到事件队列中。
2.3 处理自定义事件
处理自定义事件的代码如图4所示。
图4 处理自定义事件的代码
其中,第7-8行中的pygame.event.get()方法通过while True循环不断地从事件队列中取出事件,第9行代码通过event.type对取出的事件进行判断,如果是自定义事件print_message,则打印“Hello Pygame”消息。
3 完整代码及运行效果
3.1 完整代码
Pygame处理自定义事件的完整代码如图5所示。
图5 Pygame处理自定义事件的完整代码
3.2 运行效果
Pygame处理自定义事件完整代码的运行效果如图6所示。
图6 Pygame处理自定义事件完整代码的运行效果
从图6中可以看出,因为自定义事件每隔3000毫秒被放入队列中,因此程序大概每隔3000毫秒会打印“Hello Pygame”消息。