Счётчик кадров
Часть раздела Спрайты и изображения путешествия по Pygame на Coddy. Урок 26 из 36.
Персонаж ходит по окну, но его ноги не двигаются: он всегда показывает 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. - Каждый кадр прибавляй 1 к
timer; когда он достигнет 10, сбрось его до 0 и переключиframe_indexна следующий кадр, используя% len(frames)для перехода к началу списка. - Нарисуй
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()
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Спрайты и изображения
1Загрузка изображений
Загрузить изображениеРазместить его с помощью RectПереместить изображениеЗамостить фонПрозрачные пиксели2Поворот, отражение, масштабирование
Вращение вокруг центраПовернись в направлении полётаИзменение масштаба изображенияВращение от исходного изображения5Пиксельно точные столкновения
Прямоугольники кажутся несправедливымиМаскиПиксельно точные спрайтыКруглые хитбоксы3Классы игровых объектов
Ваш первый классМетодыSelf — это объектСписок объектовОбъекты с изображениямиПодкласс6Анимация с помощью листов спрайтов
Разрезать лист спрайтовСчётчик кадровАнимация по времениОднократная анимация взрываПотренируйтесь самостоятельно: Песочница Pygame