Menu
CoddyTech

フレームカウンター

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より小さい数にすると、脚の動きが速くなります。

challenge icon

チャレンジ

中級
  1. ループの前に、frame_index = 0とtimer = 0を設定します。
  2. 各フレームでtimerに1を加えます。10に達したら0に戻し、% len(frames)を使って折り返しながら、frame_indexを次のフレームに進めます。
  3. 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()
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

スプライトと画像のすべてのレッスン

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