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

ERJ*_*JAN 9 python pygame frame-rate pygame-clock pygame-tick

每个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)
Run Code Online (Sandbox Code Playgroud)

根据api get_ticks():

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

但是clock.tick():

应该每帧调用一次此方法.它将计算多少.自上一次调用以来已经过了几毫秒.

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

我有点困惑,这是否意味着clock.tick()直接影响自游戏开始以来经过了多少毫秒?

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

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

更新:我实际上只是测试了它,并且get_ticks()仍然以mls返回实际时间,无论你给予什么fps tick() - 0.1或者30或者60.

所以它似乎clock.tick()只是设置了游戏应该运行的速度,以及循环应该自我更新的频率.

不过我还是有点困惑,欢迎其他答案.

Mod*_*eal 9

FPS,每秒帧数,是每单位时间显示的帧数.
1/FPS是每帧之间应该经过的时间量.
Tick只是PyGame中时间的衡量标准.

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


ERJ*_*JAN 6

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

我认为时间过得更快,因为 FPS 高!它没有,我尝试了 clock.tick(0.1) - 也就是每 10 秒 1 帧,并且 get_ticks() 每 10 秒只打印一次它的经过时间因为 while 循环以 fps = 0.1 的速度运行。

但是如果 fps 更高,则更新率会更高——而不是总经过时间

现在我想通了。