pygame clock.tick() vs 游戏主循环中的帧率

新手上路,请多包涵

每个 pygame 都有一个游戏循环,如下所示:

 while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    pygame.display.flip()
    print("tick " + str(pygame.time.get_ticks()))
    clock.tick(1)

根据 get_ticks() 的 api:

返回调用 pygame.init() 后的毫秒数。在 pygame 初始化之前,这将始终为 0。

但是 clock.tick()

此方法应每帧调用一次。它会计算有多少。自上次调用以来已经过去了毫秒数。

如果您传递可选的帧速率参数,该函数 将延迟以保持游戏运行速度 低于给定的每秒滴答数。这可用于帮助限制游戏的运行速度。通过每帧调用一次 Clock.tick(40),程序将永远不会以超过每秒 40 帧的速度运行。

我有点疑惑,难道说 clock.tick() 直接影响游戏开始后过了多少毫秒?

所以 clock.tick(40) 意味着我每秒“发出”40 帧, 而 while 循环每秒运行 40 次?

我没有看到 fps 和 ticks 之间的关系。

UPDATE: I actually just tested it and get_ticks() still returns REAL time in mls no matter what fps you give to tick() - 0.1 or 30 or 60

所以看起来 clock.tick() 只是设置游戏应该运行多快或者 while 循环应该多久更新一次,通过它自己运行

但是我仍然有点困惑,欢迎其他答案。

原文由 ERJAN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

FPSFrames Per Second ,是每单位时间显示的帧数。

1 / FPS 是每帧之间应该经过的时间量。

Tick 只是 PyGame 中的时间度量。

clock.tick(40) 意味着每秒 最多 应该通过 40 帧。

原文由 ModoUnreal 发布,翻译遵循 CC BY-SA 3.0 许可协议

我设置了高 fps - clock.tick(30) 或 60,游戏运行速度很快,get_ticks() 非常快地打印出经过的时间,但是 pygame.init() 的实际运行时间 没有改变!

我认为时间过得更快是因为 FPS 高!它没有,我试过 clock.tick(0.1) - 也就是每 10 秒 1 帧,而 get_ticks() 每 10 秒只打印一次它的运行时间 因为 while 循环在 fps = 0.1 时通过自身运行。

但如果 fps 更高, 更新率就会更高—— 而不是总运行时间

现在我明白了。

原文由 ERJAN 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题