Pygame程序中的怪异滞后

克罗尔

我正在pygame中运行一个小型游戏,为此,我需要在每次主循环迭代之间保持恒定的延迟。虽然我用pygame.Clock.tick_busy_loop()将FPS计数锁定在60,但是我观察到了延迟的变化(每个循环大约4毫秒)。我的一项功能应该被修正,但是我很难找到哪一项。

我在Ipython的主循环中使用了%prun,结果如下:

         2264 function calls in 5.439 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
      322    4.401    0.014    4.401    0.014 {method 'tick' of 'Clock' objects}
      322    0.730    0.002    0.730    0.002 {pygame.display.flip}
        1    0.228    0.228    0.228    0.228 {pygame.base.quit}
        1    0.034    0.034    0.034    0.034 {method 'blit' of 'pygame.Surface' objects}
        1    0.028    0.028    5.439    5.439 main.py:9(main)
      323    0.014    0.000    0.014    0.000 {pygame.event.get}
      323    0.002    0.000    0.016    0.000 lib.py:26(getInput)
      322    0.001    0.000    0.036    0.000 lib.py:80(checkEventType)
      322    0.001    0.000    0.035    0.000 lib.py:91(instructions)
      322    0.000    0.000    0.000    0.000 {method 'get_time' of 'Clock' objects}
        1    0.000    0.000    5.439    5.439 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {pygame.mixer.stop}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}
        2    0.000    0.000    0.000    0.000 {ord}

这里有什么可以解释每次迭代之间2-5毫秒的延迟变化吗?

马库斯·莫勒(MarcusMøller)

您可能还想研究使用pygame.time.Clock.tick()而不是pygame.Clock.tick_busy_loop():

http://www.pygame.org/docs/ref/time.html#pygame.time.Clock.tick

请注意,此函数使用SDL_Delay函数,该函数在每个平台上均不准确,但使用的CPU不多。如果您想要一个准确的计时器,并且不介意咀嚼CPU,请使用tick_busy_loop。

当然,除非您非常严格地将帧速率保持在60。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章