Menu
CoddyTech

毎フレーム動かす

CoddyのPygameジャーニー「ゲームウィンドウで学ぶPython」セクションの一部。レッスン 7/32。

ゲームループは1秒間に60回実行されるため、「ここで変更」部分の行は1フレームごとに1回実行されます。これを使って、毎回変数の値を少しずつ変えてみましょう。

comet_x = comet_x + 2

右から読みます。comet_xの値を取り出して、2を加え、その結果をcomet_xに戻して保存します。値が40だったなら、今は42です。次のフレームでは44になり、その次は46になります。

彗星は毎フレームcomet_xの位置に描画されるため、フレームごとに2ピクセルずつ右へ進みます。つまり、1秒間に120ピクセルです。ゲームでは、毎フレーム少しずつ変化する数値によって、あらゆるものが動きます。

comet_x = 40はセットアップ部分にあり、1回だけ実行されます。ループの中に置くと、毎フレーム彗星の位置を40に戻すため、彗星は動きません。

Pythonには短縮形があります。comet_x += 2も同じ処理を行います。

challenge icon

チャレンジ

簡単

彗星を飛ばしましょう。# Change things here, once a frame.の部分で、毎フレームcomet_xに2を足し、1フレームごとに右へ2ピクセル移動するようにします。

自分で試してみよう

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# ゲームループの前に、ここで準備をします。
moon_x = 160
moon_y = 120
comet_x = 40
comet_y = 200

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # ここで、フレームごとに変更します。

    screen.fill((20, 24, 48))
    # 塗りつぶした後、ここで描画します。
    pygame.draw.circle(screen, (240, 230, 160), (moon_x, moon_y), 50)
    pygame.draw.circle(screen, (120, 200, 255), (comet_x, comet_y), 8)

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

pygame.quit()

ゲームウィンドウで学ぶPythonのすべてのレッスン

自分で練習してみよう: Pygameプレイグラウンド