Menu
CoddyTech

Счётчик кадров

Часть раздела Спрайты и изображения путешествия по 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, ноги будут двигаться быстрее.

challenge icon

Задание

Средне
  1. Перед циклом установи frame_index = 0 и timer = 0.
  2. Каждый кадр прибавляй 1 к timer; когда он достигнет 10, сбрось его до 0 и переключи frame_index на следующий кадр, используя % len(frames) для перехода к началу списка.
  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