【发布时间】:2021-01-22 23:33:28
【问题描述】:
我正在做一个 pygame 项目,它应该只有 4 fps,这使它每 0.25 秒一帧。我的问题是,当您短暂单击某个键时,该事件可能不会被检测到,因为程序不会在整个 0.25 秒内检查事件,而是每 0.25 秒检查一次,这很容易错过一个事件.有没有办法在pygame中解决这个问题? (我正在使用clock.tick() 来设置fps)
【问题讨论】:
我正在做一个 pygame 项目,它应该只有 4 fps,这使它每 0.25 秒一帧。我的问题是,当您短暂单击某个键时,该事件可能不会被检测到,因为程序不会在整个 0.25 秒内检查事件,而是每 0.25 秒检查一次,这很容易错过一个事件.有没有办法在pygame中解决这个问题? (我正在使用clock.tick() 来设置fps)
【问题讨论】:
由于您没有向我们展示您的代码,因此我无法针对您的特定情况提供解决方案。不过
我的问题是,当您短暂单击某个键时,可能无法检测到该事件
不,那不是真的。检测到所有事件。 pygame.event.get() 返回自上次调用此函数以来发生的所有事件。见How to get keyboard input in pygame?。
您的游戏逻辑可能是错误的,您正在设置KEYDOWN 事件发生时的状态,但当KEYUP 事件发生时将其休息。这将导致该行为。
甚至可以比应用程序循环更频繁地运行事件循环。 以更高的帧速率运行应用程序循环和事件循环,但仅以 4 FPS 运行游戏。例如,以 40 FPS 运行应用程序循环。使用帧计数器并在计数器达到 10 时运行游戏:
clock = pygame.time.Clock()
frame_count = 0
run = True
while run:
clock.tick(40)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
frame_count = (frame_count +1) % 10
if frame_count == 0:
# run game and do drawing
# [...]
pygame.display.flip()
【讨论】: