0

在像这样的循环内

FPS = 30

while True:
    TICK(FPS)
    DO OTHER STUFF

滴答(FPS)函数究竟是如何工作的?

例如:

clock = pygame.time.Clock()

while True:

    clock.tick(FPS)
    # do other stuff
4

1 回答 1

1

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 运行,从而获得更好的体验。

当然,这并不能解决延迟问题(游戏运行速度过慢与过快),但这是一个完全不同的问题 :)

于 2013-08-29T04:37:34.920 回答