我正在 pygame 中制作一个 Asteroidz 克隆,并且在 pygame.event.get() 循环中有两个事件,一个用于检查退出请求以及游戏是否应该通过按下空格键来开始,然后进一步......
我正在 pygame 中制作一个 Asteroidz 克隆,有两个 for event in pygame.event.get()
循环,一个用于检查退出请求以及游戏是否应该通过按下空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。我的 check_input
函数的相关代码如下,每个循环运行一次;
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
这种方法尝试在松开空格键之前阻止子弹射出。这个系统可以工作,但由于 for event in pygame.event.get()
速度太慢,它无法正常工作。
非常感谢您的帮助!
[...] 并有 两个 for 事件
pygame.event.get()
循环 [...]
这就是问题所在。pygame.event.get ()
获取所有消息并将其从队列中删除。请参阅文档:
这将获取所有消息并将其从队列中删除。 [...]
如果 pygame.event.get()
在多个事件循环中调用,则只有一个循环接收事件,但并非所有循环都会接收所有事件。因此,某些事件似乎被遗漏了。
每帧获取一次事件并在多个循环中使用它们,或者将列表或事件传递给处理它们的函数和方法:
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)