パイゲーム clock.tick()

Salman Mehmood 2023年6月21日
  1. Pygame ゲームループで clock.tick() と FPS を使用する
  2. clock.tick() メソッドのワークフロー
パイゲーム clock.tick()

この記事では、clock.tick() メソッドと、それが pygame モジュールでどのように機能するかについて学びます。 また、ティックと fps の違いについても学びます。

Pygame ゲームループで clock.tick() と FPS を使用する

clock.tick() vs FPS

clock.tick() という関数を見ていきます。 この関数を呼び出すと、プロセッサが実行するティック数が返されます。

tick() に 150 を入れると、プロセッサの実行時間となる 0.15 秒で 150 ティックが完了します。

ループが実行されるたびに 1 ピクセル移動すると、プロセッサが高速なコンピューターでは高速になり、プロセッサが低速なコンピューターでは遅くなります。 クロック ティックを使用するときは常に、1 ティックが 1 ミリ秒に等しいと計算されるため、これを知っておくことは重要です。

FPS は 1 秒あたりのフレームレートを表し、FPS は GPU の能力によって異なります。 たとえば、30 fps でゲームをプレイしている場合、1 秒あたり 30 フレームと表示されますが、人間の目には変化が見えません。

ストリーミング中にゲームが再生されない場合は、GPU の処理速度が遅いことが原因です。

clock.tick() メソッドのワークフロー

実際のコードに入る前に、タイマーのロジックについて話しましょう。Pygame には、数秒待ってからコードを実行する組み込み関数がないためです。ただし、そのような関数がないため、タイマーを作成する必要がありました。

pygame を開始すると、タイマーが実行を開始し、ミリ秒単位でカウントアップし、経過した時間を測定できます。 できるだけ頻繁に単一のポイントを測定し、それをタイマーに変える必要があります。

静的ポイントを呼び出したら、ポイントを継続的に測定する必要があり、中断ポイントは最後の時間または現在の時間になります。 現在の時間と静的ポイントの違いは、タイマーの長さです。

2 秒のタイマーが必要な場合は、current-time - static-time>2000 のような行が必要で、必要なコードを実行します。 1 フレームごとに時間を測定するだけなので、ミリ秒ごとには測定しません。 1 秒あたり 60 フレームの場合、16 ミリ秒ごとに時間を測定するだけです。

すべてのロジックを Python スクリプトに実装しましょう。

import pygame
import sys

pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.flip()
    clock.tick(60)

pygame モジュールのインポートから開始し、次に pygame を開始し、800 x 800 ピクセルのウィンドウを表示するメイン ディスプレイ サーフェス オブジェクトを作成します。 次の行では、pygame.time.Clock() を使用して時計を作成し、何時を正確に測定します。

次に、ゲーム ループに入り、プレイヤーがエスケープ ボタンを押したかどうかを確認します。 この pygame.display.flip() はフレームを描画し、clock.tick(60) は時間を正確に測定するので、毎秒 60 フレームになります。

タイマーを実装するには、MyCurrent_Time という変数を作成します。これは 0 で、この変数はすべてのフレームの時間を格納します。 この変数はこの while ループで使用され、pygame.time.get_ticks() を呼び出してミリ秒を返します。

ここで、button_pressTime という別の変数を作成して 0 で初期化し、ボタンがキーを押し下げられたかどうかを確認します。 したがって、この変数を取得して、同じ関数 pygame.time.get_ticks() を割り当てます。

下キーを押した後、画面を白で塗りつぶします。 fill() メソッドを使用してタプルで RGB 値を渡すと、2 秒後にウィンドウ画面が黒色で塗りつぶされます。

完全なコード スニペット:

import pygame
import sys

pygame.init()
Myscreen = pygame.display.set_mode((800, 800))

clock = pygame.time.Clock()
MyCurrent_Time = 0
button_pressTime = 0

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            button_pressTime = pygame.time.get_ticks()
            Myscreen.fill((255, 255, 255))

    MyCurrent_Time = pygame.time.get_ticks()
    if MyCurrent_Time - button_pressTime > 2000:

        Myscreen.fill((0, 0, 0))
    print(f"current time {MyCurrent_Time} button pressed time {button_pressTime}")
    pygame.display.flip()
    clock.tick(60)

出力では、ティックごとに現在の時間が増加し、下キーを押さない限り静的時間は 0 のままであることがわかります。

出力:

pygame クロック ティック

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn