Python pygame clock.tick()与游戏主循环中的帧速率

Python pygame clock.tick()与游戏主循环中的帧速率,python,pygame,frame-rate,pygame-clock,pygame-tick,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) 根据g

每个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和滴答声之间的关系

更新: 实际上,我刚刚测试过它,
get_ticks()
仍然在mls中以实时方式返回,无论您给
tick()-0.1
30
60

所以看来,
clock.tick()
只是设置了游戏应该运行的速度,或者while循环应该更新自身的频率,通过自身运行

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

FPS,每秒帧数是每单位时间显示的帧数。
1/FPS是每帧之间应经过的时间量。
滴答声只是PyGame中的一种时间度量


clock.tick(40)
表示每秒最多应通过40帧。

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

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

但是如果fps更高,更新率将更高-而不是总运行时间


现在我明白了。

我知道已经有人回答了,但我想解释一些我感到厌倦的事情

import pygame

pygame.init()

gameDisplay = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

crashed = False

counter = 1
while not crashed:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

    pygame.display.update()
    print(counter)
    counter += 1
    clock.tick(1) # will be 10 in the next run 
所以我们要做的是,我们将进行两次运行,一次每秒帧数等于1,另一次每秒帧数为10,我们将运行代码10秒“我用我的手机秒表来做这个”

所以从数学上讲,10秒的1fps是10对的,10秒的10fps是100“duuh” 因此,第一次运行“1fps”时,计数器变量应该在10左右,“取决于您的计时”,而控制台中10秒计数器变量结束时的第二次运行应该在100左右

简而言之,我们可以说循环控制着你的游戏显示 和clock.tick()指定更改游戏显示的速度
换言之,循环运行的速度不仅如此!我想要更深入的解释,但是谢谢!基本上是时钟。勾号(3)告诉主循环:以每秒3帧的速度运行,这不会影响游戏的实际实时性。