Создание анимации: ключ, фреймы, частота

Phaser — это мощная библиотека для создания 2D-игр на JavaScript, предоставляющая гибкие инструменты для работы с анимациями. Анимация в Phaser строится на спрайтах, фреймах и ключах анимаций, что позволяет легко управлять последовательностью изображений и частотой их отображения.

Ключи анимации

Ключ анимации (key) — это уникальный идентификатор, который используется для обращения к конкретной анимации. Создавая анимацию, необходимо присвоить ей ключ, чтобы затем можно было запускать её на нужном спрайте:

this.anims.create({
    key: 'walk',
    frames: this.anims.generateFrameNumbers('player', { start: 0, end: 5 }),
    frameRate: 10,
    repeat: -1
});
  • key — уникальное имя анимации.
  • frames — массив кадров, которые будут отображаться.
  • frameRate — количество кадров в секунду.
  • repeat — количество повторений; -1 означает бесконечный цикл.

Ключи позволяют многократно использовать одну и ту же анимацию на разных объектах без повторного создания кадров.

Фреймы анимации

Фреймы — отдельные изображения, составляющие анимацию. В Phaser фреймы могут быть:

  • Из спрайт-листа — одной текстуры, содержащей несколько кадров.
  • Отдельными изображениями — каждый кадр загружается как отдельный ресурс.

Генерация фреймов из спрайт-листа осуществляется через метод generateFrameNumbers:

this.anims.generateFrameNumbers('player', { start: 0, end: 5 });
  • start — индекс первого кадра в спрайт-листе.
  • end — индекс последнего кадра.
  • Можно использовать frames: [0, 2, 4, 5] для произвольного порядка кадров.

Частота анимации

Frame rate определяет, сколько кадров отображается в секунду. Высокий frameRate делает анимацию плавной, низкий — более рваной и медленной. Для адаптивного управления частотой кадров можно использовать:

frameRate: 12   // 12 кадров в секунду
  • Значение выше 60 не имеет смысла для стандартного рендеринга, так как большинство экранов обновляются с частотой 60 Гц.
  • Частота влияет на восприятие движения: при игре на высоких скоростях низкий frameRate делает движения дергаными.

Повторение и автозапуск

Параметры repeat и yoyo контролируют повтор анимации:

  • repeat: -1 — бесконечный цикл.
  • repeat: 0 — проигрывание один раз.
  • yoyo: true — проигрывание анимации в обратном порядке после достижения конца.

Пример с автозапуском и бесконечным циклом:

this.anims.create({
    key: 'run',
    frames: this.anims.generateFrameNumbers('player', { start: 0, end: 7 }),
    frameRate: 15,
    repeat: -1
});

player.anims.play('run');

Использование нескольких анимаций на одном спрайте

Спрайт может иметь несколько анимаций с разными ключами. Переключение между ними выполняется методом play:

player.anims.play('walk');   // запуск анимации ходьбы
player.anims.play('jump');   // переключение на прыжок

Для плавного перехода можно использовать crossFade:

player.anims.crossFade('jump', 200); // плавный переход за 200 мс

Управление кадрами вручную

Иногда требуется полная ручная контроль над кадрами:

player.anims.setFrame(3); // установка конкретного кадра

Метод полезен для синхронизации с событиями, ударами, столкновениями и другими триггерами внутри игры.

Итоговые рекомендации

  • Ключи анимаций обеспечивают повторное использование и упрощают управление спрайтами.
  • Фреймы должны подбираться с учётом плавности движения и логики игры.
  • Frame rate напрямую влияет на визуальное восприятие анимации и должен соответствовать скорости игры.
  • Повторение и yoyo дают гибкость в циклических анимациях.
  • Ручное управление кадрами расширяет возможности динамического взаимодействия спрайта с событиями.

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