В Phaser твин (tween) используется для плавного изменения свойств объекта с течением времени. Твины позволяют анимировать позицию, масштаб, прозрачность, вращение и любые другие числовые свойства объектов. Управление твинами включает запуск, паузу, продолжение, перемотку и перезапуск, что делает анимации гибкими и управляемыми.
Создание базового твина осуществляется через
this.tweens.add():
const tween = this.tweens.add({
targets: sprite,
x: 400,
y: 300,
duration: 2000,
ease: 'Power2',
yoyo: true,
repeat: -1
});
Здесь ключевые параметры:
targets — объект или массив объектов для анимации.x, y — свойства, которые будут
изменяться.duration — длительность анимации в миллисекундах.ease — функция сглаживания.yoyo — возвращение к начальной позиции.repeat — количество повторов (-1 — бесконечно).Для временной остановки анимации используется метод
pause():
tween.pause();
Особенности работы:
paused — свойство твина, которое отражает его текущее
состояние (true — пауза, false —
выполняется).Продолжение анимации осуществляется методом
resume():
tween.resume();
Перемотка позволяет изменить текущее положение анимации относительно её длительности.
tween.seek(progress)
progress принимает значение от 0 до 1.tween.seek(0.5); // Перемотка на середину анимации
tween.setProgress(progress)
seek, но чаще используется для
динамического обновления в цикле игры.tween.setTime(time)
tween.setTime(1000); // Перемотка на 1 секунду
repeat > 0),
перемотка учитывает все повторения.resume() для
продолжения анимации.Phaser позволяет менять направление твина во время исполнения:
tween.reverse();
reverse() меняет направление текущего движения,
сохраняя прогресс.pause() и seek().Для сложных анимаций используется timeline:
const timeline = this.tweens.createTimeline();
timeline.add({
targets: sprite,
x: 400,
duration: 1000
});
timeline.add({
targets: sprite,
y: 300,
duration: 1000
});
timeline.play();
timeline.pause();
timeline.seek(0.5);
timeline.resume();
Phaser предоставляет несколько событий для отслеживания состояния твина:
onStart — вызывается при старте твина.onComplete — вызывается после завершения твина.onUpdate — вызывается на каждом кадре анимации.onLoop — при повторении твина.Пример использования для паузы и перемотки:
tween.on('update', () => {
if (sprite.x > 300) {
tween.pause();
}
});
tween.on('complete', () => {
tween.seek(0);
tween.resume();
});
seek() и setTime() удобно
для синхронизации анимации с игровыми событиями.timeline вместо множества отдельных
твинов.pause() и reverse() создаёт
эффект интерактивного управления анимацией, например для меню или
игровых объектов.Тщательное понимание работы паузы, перемотки и управления направлением твинов в Phaser позволяет создавать динамичные и отзывчивые анимации, которые интегрируются в игровой процесс без потери синхронизации и плавности.