フレームカウンター
CoddyのPygameジャーニー「スプライトと画像」セクションの一部。レッスン 26/36。
キャラクターはウィンドウ内を歩いていますが、脚はまったく動きません。常にframes[0]を表示しているからです。毎回もう一方のフレームを表示すると、1秒間に60回ちらつき、脚の動きには速すぎます。代わりに、カウンターを使って各画像を数フレームずつ表示します。
timer += 1
if timer == 10:
timer = 0
frame_index = (frame_index + 1) % len(frames)timerはフレーム数を数えます。10フレームごとに0から数え直し、frame_indexは次の画像に進みます。% len(frames)によって、最後の画像の後は0に戻るため、リスト内のフレーム数にかかわらず歩き続けます。
frames[frame_index]を描画します。1秒間に60フレームの場合、各ポーズは6分の1秒表示され、落ち着いた歩き方になります。10より小さい数にすると、脚の動きが速くなります。
チャレンジ
中級- ループの前に、
frame_index = 0とtimer = 0を設定します。 - 各フレームで
timerに1を加えます。10に達したら0に戻し、% len(frames)を使って折り返しながら、frame_indexを次のフレームに進めます。 frames[frame_index]を(x, 300)に描画します。
自分で試してみよう
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Walk Cycle")
clock = pygame.time.Clock()
sheet = pygame.image.load("assets/sheets/platformer_characters.png").convert_alpha()
frames = []
for col in (0, 1):
frame = sheet.subsurface((col * 24, 0, 24, 24))
frames.append(pygame.transform.scale_by(frame, 3))
x = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
x += 2
if x > 640:
x = -72
screen.fill((20, 22, 40))
screen.blit(frames[0], (x, 300))
pygame.display.flip()
clock.tick(60)
pygame.quit()
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
スプライトと画像のすべてのレッスン
自分で練習してみよう: Pygameプレイグラウンド