更快版本的“ pygame.event.get()”。为什么会错过事件,为什么会延迟事件?

浏览:44日期:2024-03-09
如何解决更快版本的“ pygame.event.get()”。为什么会错过事件,为什么会延迟事件??

[…]并在循环中有 for事件pygame.event.get()[..]“

这就是问题。pygame.event.get()获取所有消息并将其从队列中删除。如果pygame.event.get()在多个事件循环中调用if ,则只有一个循环接收事件,但绝不会所有循环都接收所有事件。结果,似乎错过了一些事件。

获取一次事件,并在多个循环中使用它们,或将列表或事件传递给处理它们的函数和方法:

def handle_events(events): for event in events:# [...]while run: event_list = pygame.event.get() # [...] # 1st event loop for event in event_list:# [...] # [...] # 2nd event loop for event in event_list:# [...] # [...] # function which handles events handle_events(event_list)解决方法

我正在pygame中制作一个Asteroidz克隆,有两个for event inpygame.event.get()循环,一个用于检查退出请求,另外游戏应该已经通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。下面是我的check_input函数的相关代码,每个循环运行一次。

def check_input(self): for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH,WHOLE PROCESS IS TOO SLOWif (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE): print (’boop’) self.shootThrottle = 0 if self.shootThrottle == 0:self.shootThrottle += 1bullets.add(Bullet(self.shape[0][0],self.shape[0][1],self.angle)) key = pygame.key.get_pressed() if key[pygame.K_LEFT]:self.angle -= 7self.rotate(-7) elif key[pygame.K_RIGHT]:self.angle += 7self.rotate(7) if self.angle > 360:self.angle -= 360 elif self.angle < 0:self.angle += 360 if key[pygame.K_UP]:self.accelerate() elif key[pygame.K_DOWN]:self.decelerate()

我正在使用shootThrottle这种方法来尝试阻止子弹射击,直到释放空格键为止。该系统可以运行,但是由于for event inpygame.event.get()速度太慢,因此无法正常运行。

任何帮助深表感谢!

相关文章: