Phaser предоставляет мощный модуль для работы с анимацией спрайтов,
позволяя управлять их воспроизведением через методы play,
resume, pause и stop. Анимации
создаются с помощью this.anims.create и присваиваются
объектам спрайтов. Каждый спрайт может воспроизводить одну или несколько
анимаций, управляемых через ключи анимации.
this.anims.create({
key: 'run',
frames: this.anims.generateFrameNumbers('player', { start: 0, end: 5 }),
frameRate: 10,
repeat: -1
});
let player = this.add.sprite(100, 100, 'player');
player.play('run');
playМетод play запускает анимацию на спрайте. В качестве
параметра передается ключ анимации, определенный при создании.
Дополнительно можно передать объект с опциями:
true, анимация
не будет перезапущена, если уже воспроизводится.player.play('run', true); // true как параметр ignoreIfPlaying
player.play({ key: 'run', startFrame: 2 });
При использовании play повторная попытка запуска той же
анимации по умолчанию перезапускает её с первого кадра, если
ignoreIfPlaying не указан.
pauseМетод pause приостанавливает воспроизведение текущей
анимации, сохраняя текущее состояние. Можно указать конкретный кадр, на
котором должна остановиться анимация.
player.anims.pause(); // пауза на текущем кадре
player.anims.pause(player.anims.currentFrame); // явная фиксация на текущем кадре
Приостановленная анимация сохраняет все настройки: скорость, повтор и текущее положение. Это позволяет затем корректно продолжить воспроизведение.
resumeМетод resume возобновляет ранее приостановленную
анимацию. Используется в сочетании с pause для временной
остановки действий персонажа или визуальных эффектов.
player.anims.resume();
Если анимация не была приостановлена, вызов resume
просто проигнорирует действие, не вызывая ошибок.
stopМетод stop полностью останавливает анимацию и сбрасывает
её состояние. После вызова stop анимацию можно запускать
снова с помощью play, но она начнется с первого кадра.
player.anims.stop();
Метод stop также принимает объект с опциями:
true, спрайт
вернется к первому кадру анимации или к исходному кадру текстуры.player.anims.stop(true); // сброс к исходному кадру
Частой задачей является управление анимацией в зависимости от состояния игры. Например, можно приостановить анимацию при паузе игры, затем возобновить её после возобновления.
function togglePauseAnimation(sprite, isPaused) {
if (isPaused) {
sprite.anims.pause();
} else {
sprite.anims.resume();
}
}
Другой пример — смена анимации при смене действия персонажа с автоматическим перезапуском:
if (player.body.velocity.x !== 0) {
player.play({ key: 'run', ignoreIfPlaying: true });
} else {
player.play('idle', true);
}
Phaser позволяет контролировать скорость и направление
воспроизведения. Использование методов setTimeScale и
setReverse изменяет поведение текущей анимации без
необходимости пересоздавать её.
player.anims.currentAnim.setTimeScale(1.5); // ускорение в 1.5 раза
player.anims.currentAnim.setReverse(true); // воспроизведение в обратном порядке
Эти методы особенно полезны для создания динамичных визуальных эффектов, таких как ускорение движения персонажа или эффект замедления при столкновениях.
Phaser предоставляет события для отслеживания состояний анимации:
animationstart – срабатывает при
начале воспроизведения.animationcomplete – срабатывает при
завершении анимации.animationpause – срабатывает при
приостановке.animationresume – срабатывает при
возобновлении.animationstop – срабатывает при полном
останове.player.on('animationcomplete', () => {
console.log('Анимация завершена');
});
player.on('animationpause', () => {
console.log('Анимация приостановлена');
});
Эти события позволяют синхронизировать логику игры с визуальными эффектами, например запускать звуковой эффект при завершении анимации удара или смене состояния персонажа.
repeat: -1.repeat, чтобы анимация автоматически завершалась.pause и resume эффективны для
управления временными остановками игры без потери состояния
спрайта.stop применять, когда требуется полностью сбросить
состояние и подготовить спрайт к новой анимации.Гибкое использование play, pause,
resume и stop позволяет создавать реалистичные
и отзывчивые игровые сцены, обеспечивая полное управление визуальными
эффектами спрайтов.