17

每个 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)

根据api get_ticks()

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

但是clock.tick()

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

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

我有点疑惑,是不是说clock.tick()直接影响到游戏开始后经过了多少毫秒?

那么clock.tick(40)意味着我每秒“发出” 40 帧,而 while 循环每秒运行 40 次?

我没有看到 fps 和滴答声之间的关系。

更新:我实际上只是对其进行了测试,并且get_ticks()无论您给tick() - 0.1or 30or的 fps 是多少,它仍然以 mls 为单位返回实时时间60

因此,它似乎clock.tick()只是设置了游戏应该运行多快或者while 循环应该多久更新一次,通过自身运行

但是我仍然有点困惑,欢迎其他答案。

4

3 回答 3

16

FPS,即每秒帧数,是每单位时间显示的帧数。
1 / FPS是每帧之间应该经过的时间量。
Tick只是 PyGame 中时间的度量。

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

于 2015-12-20T17:16:12.410 回答
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 更高,更新率会更高-而不是总经过时间

现在我想通了。

于 2015-12-20T17:27:58.220 回答
2

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

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 秒的 1 fps 是正确的 10 和 10 秒中的 10 fps 是 100 “duuh” 所以你应该运行第一次运行“1 fps”是计数器变量应该在 10 左右“取决于你的时间”和第二次运行在控制台中的 10 秒计数器变量结束时应该在 100 左右

因此,简而言之,我们可以说循环正在控制您的游戏显示,而 clock.tick() 指定您想要更改游戏显示的速度,换句话说,循环运行的速度有多快

于 2019-10-02T15:16:38.967 回答