Menu
CoddyTech

帧计数器

本课属于 Coddy Pygame 学习旅程的“精灵与图像”单元。第 27 课,共 39 课。

角色在窗口中行走,但它的腿从不动:它始终显示 frames[0]。每次都显示另一帧会导致画面每秒闪烁 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]。以每秒 60 帧的速度播放时,每个姿势会显示六分之一秒,呈现出平稳的行走效果。数字小于 10 会让腿动得更快。

challenge icon

挑战

中等

让角色走路。

  1. 在循环前,创建 frame_index = 0 和 timer = 0。
  2. 每帧给 timer 加 1;达到 10 时,将它重置为 0,并让 frame_index 加 1,用 % len(frames) 循环回绕。
  3. 在 (x, 300) 位置绘制 frames[frame_index]。

按下“开始”:角色走路时,腿会移动。然后点击“检查”。

亲手试试

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 在线编辑器