gpt4 book ai didi

python - 'pygame.event.get()' 的更快版本。为什么事件会被错过以及为什么事件会被延迟?

转载 作者:行者123 更新时间:2023-12-01 07:13:50 33 4
gpt4 key购买 nike

我正在 pygame 中制作 Asteroidz 克隆,并在 pygame.event.get() 中有两个 for event 循环,一个用于检查退出请求以及游戏是否应该通过按空格键开始,然后在游戏中进一步尝试限制玩家按住空格键并连续射击。我的 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 作为尝试阻止子弹射击的方法,直到松开空格键为止。该系统可以工作,但由于 pygame.event.get() 中的 for event 太慢,因此无法正常运行。

非常感谢任何帮助!

最佳答案

[...] and have two for event in pygame.event.get() loops [..]"

这就是问题所在。 pygame.event.get() 获取所有消息并将它们从队列中删除。请参阅文档:

This will get all the messages and remove them from the queue. [...]

如果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)

关于python - 'pygame.event.get()' 的更快版本。为什么事件会被错过以及为什么事件会被延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086113/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com