毎フレーム動かす
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も同じ処理を行います。
チャレンジ
簡単彗星を飛ばしましょう。# 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プレイグラウンド