В библиотеке Phaser управление анимациями организовано через объект AnimationManager, который служит глобальным хранилищем всех анимаций, доступных в игре. Он позволяет создавать, хранить, воспроизводить и управлять анимациями для спрайтов и других игровых объектов.
Регистрация анимаций Анимации регистрируются глобально и могут использоваться любым спрайтом, что позволяет не дублировать один и тот же набор кадров.
this.anims.create({
key: 'walk',
frames: this.anims.generateFrameNumbers('player', { start: 0, end: 9 }),
frameRate: 10,
repeat: -1
});
key — уникальный идентификатор анимации.frames — набор кадров для воспроизведения.frameRate — скорость анимации в кадрах в секунду.repeat — количество повторов; -1 означает
бесконечное воспроизведение.Генерация кадров
generateFrameNumbers и generateFrameNames
позволяют автоматически формировать массив кадров из спрайтшитов или
атласов.
const frames = this.anims.generateFrameNames('enemyAtlas', {
prefix: 'enemy_',
start: 1,
end: 4,
zeroPad: 2
});Воспроизведение анимаций на спрайте Любой спрайт
может запускать анимацию, зарегистрированную в
AnimationManager, используя метод
play.
player.play('walk');
Если анимация уже воспроизводится, можно использовать опцию
ignoreIfPlaying, чтобы не перезапускать её:
player.play({ key: 'walk', ignoreIfPlaying: true });События анимаций Phaser позволяет отслеживать жизненный цикл анимаций через события:
animationstart — запуск анимации.animationupdate — изменение кадра.animationcomplete — завершение воспроизведения.animationrepeat — повтор анимации.Пример привязки событий:
player.on('animationcomplete', (animation, frame) => {
console.log(`Анимация ${animation.key} завершена`);
});get(key) — возвращает объект анимации по ключу.
const walkAnim = this.anims.get('walk');exists(key) — проверяет, зарегистрирована ли анимация.
remove(key) — удаляет анимацию из глобального реестра.
fromJSON(json) и toJSON() — импорт и экспорт анимаций в формате JSON, удобный для сохранения конфигурации или использования внешних редакторов.
frameRate.this.anims.create({
key: 'jump',
frames: this.anims.generateFrameNumbers('player', { start: 10, end: 15 }),
frameRate: 12,
repeat: 0,
yoyo: true
});
AnimationManager позволяет повторно использовать одну и ту же анимацию на нескольких спрайтах, что экономит память и упрощает управление:
const enemies = this.add.group();
for (let i = 0; i < 5; i++) {
const enemy = enemies.create(100 * i, 200, 'enemy');
enemy.play('walk');
}
Каждый спрайт воспроизводит одну и ту же анимацию, зарегистрированную в AnimationManager, без создания новых объектов кадров.
Пример использования атласа:
this.anims.create({
key: 'attack',
frames: this.anims.generateFrameNames('characterAtlas', {
prefix: 'attack_',
start: 1,
end: 5,
zeroPad: 2
}),
frameRate: 15
});
Анимации интегрируются с физическими объектами Phaser, позволяя синхронизировать визуальные эффекты и движение. Например, при изменении состояния спрайта:
if (player.body.velocity.y > 0) {
player.play('fall', true);
} else if (player.body.velocity.x !== 0) {
player.play('run', true);
} else {
player.play('idle', true);
}
Опция true в методе play означает, что
анимация будет принудительно переключена на указанную, если уже
воспроизводится другая.
Phaser поддерживает точное управление временем:
this.anims.create({
key: 'blink',
frames: this.anims.generateFrameNumbers('player', { start: 20, end: 22 }),
frameRate: 5,
repeat: -1,
repeatDelay: 500
});
AnimationManager является ключевым инструментом Phaser для работы с анимацией, обеспечивая единое управление кадрами, повторениями, событиями и синхронизацией с игровыми объектами, что делает анимации гибкими и эффективными.