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()

このメソッドは、フレームごとに 1 回呼び出す必要があります。の数を計算します。前回の呼び出しからミリ秒が経過しました。

オプションのフレームレート引数を渡すと、関数は遅延して、指定されたティック/秒よりも遅くゲームを実行し続けます。これは、ゲームの実行速度を制限するために使用できます。フレームごとに 1 回 Clock.tick(40) を呼び出すことにより、プログラムは 1 秒あたり 40 フレームを超えて実行されることはありません。

少し混乱していますが、それclock.tick()はゲームの開始から経過したミリ秒数に直接影響するということですか?

つまりclock.tick(40)、1 秒あたり 40 フレームを「発行」し、while ループが 1 秒あたり 40 回実行されるということですか?

fps と ticks の関係がわかりません。

更新: 実際にテストしたところ、orget_ticks()にどのような fps を指定しても、mls 単位で REAL 時間が返されます。tick() - 0.13060

したがって、ゲームの実行速度またはwhile loop が自分自身を更新する頻度をclock.tick()設定するだけのようです。

しかし、私はまだ少し混乱しています。他の回答は大歓迎です。

4

3 に答える 3

6

私は高い fps を設定しました - clock.tick(30) または 60、そしてゲームは高速で実行され、get_ticks() は経過時間を非常に高速に出力しますが、pygame.init() からの実際の実行時間は変わりません!

FPSが高いから時間の進みが早いと思いました!そうではありません。私は clock.tick(0.1) - 別名 10 秒ごとに 1 フレームを試しましたが、get_ticks() は経過時間を 10 秒ごとに 1 回だけ出力しました! while ループが fps = 0.1 でそれ自体を実行していたためです。

ただし、fps が高ければ、合計経過時間ではなく更新レートが高くなります。

今、私はそれを理解しました。

于 2015-12-20T17:27:58.220 に答える