如何避免事件驱动程序的忙等待循环?



我正在使用pygame用python编写一个国际象棋游戏。其中一个常见的任务是需要处理事件,我所知道的唯一方法是这样做的:

while True:
for event in pygame.event.get():  
# handle event

while循环只是继续旋转,这是低效的。在嵌入式编程中,你可以让cpu进入睡眠状态,直到出现中断。有没有办法在python中做类似的事情,让循环等待事件?

pygame.time.Clock.tick(如"Pygame时钟和事件循环"中所述)可以限制每秒的帧数/迭代数,这不是我想要完成的。

我觉得你应该用

pygame.event.wait()

返回队列中的单个事件。如果队列是空的,这个函数将等待,直到创建一个。当程序等待时,它将以空闲状态休眠。

请参阅本文档

Pygame不支持这样的中断,它需要您自己获取事件。然而,他们确实有一个时钟,允许你在设定的间隔内执行操作,例如每秒60次。

处理事件也可以在主游戏循环中完成,这是你无论如何都需要的。

你可以这样设置:

import pygame
class Game():
def __init__(self):
pygame.init()
self.clock = pygame.time.Clock()
def mainloop(self):
while True:
time = self.clock.tick(60)
for event in pygame.event.get():
# Handle events
pass

# Do other game calculations

最新更新