すべての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 forget_ticks()
によれば:
Pygame.init()が呼び出されてからのmilliscondsの数を返します。 pygameが初期化される前、これは常に0になります。
しかしclock.tick()
:
このメソッドは、フレームごとに1回呼び出す必要があります。それはいくつ計算します。前回の呼び出しからミリ秒が経過しました。
オプションのフレームレート引数を渡すと、関数は、ゲームの実行を指定された1秒あたりのティックよりも遅く維持するために遅延します。これは、ゲームのランタイム速度を制限するために使用できます。 Clock.tick(40)をフレームごとに1回呼び出すことにより、プログラムは毎秒40フレームを超えて実行されることはありません。
少し混乱していますが、clock.tick()
は、ゲームの開始から経過したミリ秒数に直接影響するということですか?
したがって、clock.tick(40)
は、毎秒40フレームを「発行」し、whileループを毎秒40回実行することを意味しますか?
Fpsとティックの関係がわかりません。
更新:実際にテストしたところ、get_ticks()
は、tick() - 0.1
または_30
_または_60
_に与えたfpsに関係なく、実際の時間をミリ秒で返します。
したがって、clock.tick()
は、ゲームの実行速度またはループがそれ自体を更新する頻度を設定するだけで、それ自体を実行するようです。
しかし、私はまだ少し混乱していますが、他の回答を歓迎します。
[〜#〜] fps [〜#〜]、1秒あたりのフレーム数は、1単位あたりのフレーム数です。時間。
1/FPSは、各フレーム間で経過する必要のある時間です。
Tickは、PyGameにおける時間の測定にすぎません。
clock.tick(40)
は、毎秒最大で40フレームが通過することを意味します。
私は高いfpsを設定しました-clock.tick(30)または60、そしてゲームは速く実行され、get_ticks()は経過時間を非常に速く出力しますが、pygame.init()からの実際のランタイム変更されませんでした!
FPSが高いので時間が速くなると思いました!それはしません、私はclock.tick(0.1)-別名1フレームを10秒ごとに試しました、そしてget_ticks()はその経過時間のみを出力しましたONCE PER 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秒あたりのフレーム数が1であるものと、10であるものを2回実行し、コードを10秒間実行します。「電話のストップウォッチを使用してこれを実行します」。
したがって、数学的には1秒あたり10 fpsは10で10秒あたり10 fpsは100 "duuh"なので、最初の実行を実行する必要があるのは "1 fps"で、カウンタ変数は約10 "タイミングに依存します"と2番目の実行です。コンソールの10秒のカウンター変数の最後で約100
つまり、簡単に言うと、ループはゲームの表示を制御しており、clock.tick()はゲームの表示を変更する速さ、つまりループの実行速度を指定します。