Python pygame clock.tick()与游戏主循环中的帧速率
每个pygame都有一个如下所示的游戏循环: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
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帧的速度运行,这不会影响游戏的实际实时性。