Анимация в Pygame: создаем персонажа из спрайтов

Создадим анимацию игрового персонажа, заменив простой квадрат настоящим героем.

Создание персонажа и анимации

Для этого потребуются изображения, называемые спрайтами. Это небольшие картинки, последовательное отображение которых создаёт эффект анимации.

Подготовка проекта

Поместите спрайты в одну папку с файлом game.py. Для удобства создайте подпапку (например, game), куда поместите game.py и все спрайты.

Модификация кода

Удалим из кода управление движением игрока вверх и вниз. Оставим только прыжок (пробел).

Добавим три переменные:

  • left: указывает, движется ли игрок влево (True) или нет (False).
  • right: указывает, движется ли игрок вправо (True) или нет (False).
  • animCount: отслеживает текущий спрайт анимации.

Важно: не изменяйте названия файлов спрайтов (например, 1.png, 2.png и т.д.), так как нумерация используется в анимации.

Инициализируем переменные:

left = False
right = False
animCount = 0

Загрузка изображений

Загрузим изображения:

walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'), pygame.image.load('R4.png'), pygame.image.load('R5.png'), pygame.image.load('R6.png')]
walkLeft = [pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load('L3.png'), pygame.image.load('L4.png'), pygame.image.load('L5.png'), pygame.image.load('L6.png')]
playerStand = pygame.image.load('standing.png')
bg = pygame.image.load('bg.jpg')

Установим размеры игрока (например, 60×71 пикселей):

width = 60
height = 71

Функция drawWindow

Вынесем код отрисовки в функцию drawWindow:

def drawWindow():
    #Код отрисовки здесь...

В функции drawWindow:

  • Используем bg.blit(0, 0) для отрисовки фона.
  • Добавим глобальную переменную animCount с помощью global animCount.

Анимация персонажа

В drawWindow добавим логику анимации:

    if animCount + 1 >= 30:
        animCount = 0

    if left:
        screen.blit(walkLeft[animCount // 5], (x,y))
        animCount += 1
    elif right:
        screen.blit(walkRight[animCount // 5], (x,y))
        animCount += 1
    else:
        screen.blit(playerStand, (x,y))

30 фреймов в секунду, каждый спрайт отображается 5 кадров (6 спрайтов * 5 кадров = 30 кадров).

Управление анимацией и движением влево/вправо:

    if keys[pygame.K_LEFT] and x > 5:
        x -= vel
        left = True
        right = False
    elif keys[pygame.K_RIGHT] and x < 500 - width - 5:
        x += vel
        right = True
        left = False
    else:
        left = False
        right = False
        animCount = 0

Добавим вызов drawWindow в основной цикл:

    drawWindow()

Окончательная настройка

Убедитесь, что фон отрисовывается до персонажа.

Мы реализовали анимацию персонажа с помощью спрайтов. Персонаж может двигаться влево и вправо, а также прыгать. Экспериментируйте с изображениями и создавайте своих персонажей.

Что будем искать? Например,программа