在像这样的循环内
FPS = 30
while True:
TICK(FPS)
DO OTHER STUFF
滴答(FPS)函数究竟是如何工作的?
例如:
clock = pygame.time.Clock()
while True:
clock.tick(FPS)
# do other stuff
tick
函数通常在游戏或其他涉及大量图形变化非常快的程序中使用。
如果我们以游戏为例,“主循环”通常看起来像这样:
while True:
# Handle user input
# Do physics calculations/etc
# Update character positions
# Draw things to the screen
游戏基本上会尽可能快地循环通过这些步骤的一些变体。
这导致了一个问题:有时,游戏循环过快(无法播放)或过慢(滞后),导致游戏在不同计算机/等上的运行速度不一致。例如,如果您尝试在现代计算机上玩 10 年前的某个游戏,它们可能运行得太快,除非您手动减慢游戏速度。
该tick
功能旨在解决“太快”的问题。在每个循环之后,该tick
函数将检查经过了多少时间,并暂停游戏几毫秒,以确保程序以尽可能一致的间隔绘制到屏幕上。
通常,“tick”函数有时看起来类似于:
def tick(fps):
interval = 60 / fps
current_time = time()
delta = current_time - last_time
if delta < interval:
sleep(interval - delta)
last_called = time()
(它可能会比这更复杂,以处理奇怪的边缘情况/更有效,但你明白了一般的想法)
这可确保无论您使用什么计算机,或者您的程序运行速度有多快,您的游戏始终以一致的 fps 运行,从而获得更好的体验。
当然,这并不能解决延迟问题(游戏运行速度过慢与过快),但这是一个完全不同的问题 :)