Python 更快版本的“pygame.event.get()”。为什么会错过活动?为什么会推迟活动?
我正在pygame中制作一个Asterbotz克隆,pygame.event.get循环中有两个for event循环,一个用于检查退出请求,一个用于检查游戏是否应该通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。我的check_输入函数的相关代码如下,该函数在每个循环中运行一次Python 更快版本的“pygame.event.get()”。为什么会错过活动?为什么会推迟活动?,python,python-3.x,loops,pygame,Python,Python 3.x,Loops,Pygame,我正在pygame中制作一个Asterbotz克隆,pygame.event.get循环中有两个for event循环,一个用于检查退出请求,一个用于检查游戏是否应该通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。我的check_输入函数的相关代码如下,该函数在每个循环中运行一次 def check_input(self): for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH, WHOLE
def check_input(self):
for event in pygame.event.get(): #NOT CHECKING THIS FAST ENOUGH, WHOLE PROCESS IS TOO SLOW
if (event.type == pygame.KEYUP) and (event.key == pygame.K_SPACE):
print ('boop')
self.shootThrottle = 0
if self.shootThrottle == 0:
self.shootThrottle += 1
bullets.add(Bullet(self.shape[0][0],self.shape[0][1], self.angle))
key = pygame.key.get_pressed()
if key[pygame.K_LEFT]:
self.angle -= 7
self.rotate(-7)
elif key[pygame.K_RIGHT]:
self.angle += 7
self.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作为一种手段,试图阻止子弹被射中,直到空格键被释放。此系统可以工作,但由于pygame.event.get中的for事件太慢,因此无法正常工作
非常感谢您的帮助
[…]并且在pygame.event.get循环中有两个for event[…]
这就是问题所在。获取所有消息并将其从队列中删除。请参阅文档:
这将获取所有消息并将它们从队列中删除。[……]
如果在多个事件循环中调用pygame.event.get,则只有一个循环接收事件,而不是所有循环都接收所有事件。因此,一些活动似乎被错过了
每帧获取一次事件,并在多个循环中使用它们,或者将列表或事件传递给处理它们的函数和方法:
def处理事件组件:
对于事件中的事件:
[...]
运行时:
event_list=pygame.event.get
[...]
第一事件循环
对于事件列表中的事件:
[...]
[...]
第二事件循环
对于事件列表中的事件:
[...]
[...]
处理事件的函数
处理事件列表