帧计数器
本课属于 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 会让腿动得更快。
挑战
中等让角色走路。
- 在循环前,创建
frame_index = 0和timer = 0。 - 每帧给
timer加 1;达到 10 时,将它重置为 0,并让frame_index加 1,用% len(frames)循环回绕。 - 在
(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 在线编辑器