О чем этот пример
Плавные анимации — ключ к созданию живой и отзывчивой игровой сцены. Часто нужно не просто запустить движение объекта, а сделать это с небольшой паузой, например, чтобы синхронизировать действия или создать эффект ожидания. Встроенный в Phaser 3 менеджер твинов предоставляет для этого простой и мощный инструмент — свойство `delay`. Эта статья покажет, как использовать задержку в твинах на практическом примере. Вы научитесь контролировать время начала анимации, что поможет вам создавать более сложные и визуально приятные последовательности действий в вашей игре.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
constructor()
{
super();
}
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('block', 'assets/sprites/block.png');
}
create ()
{
var marker = this.add.image(100, 100, 'block').setAlpha(0.3);
var image = this.add.image(100, 100, 'block');
var tween = this.tweens.add({
targets: image,
x: 600,
ease: 'Power1',
duration: 3000,
delay: 2000
});
}
}
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Подготовка сцены и загрузка ассетов
Вся работа происходит внутри сцены, расширяющей класс Phaser.Scene. В методе preload мы загружаем спрайт, который будем анимировать. Важно заметить использование метода load.setBaseURL, который задаёт базовый URL для всех последующих загрузок. Это удобно, чтобы не писать полный путь к файлам каждый раз.
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('block', 'assets/sprites/block.png');
}
Создание визуальных маркеров и объектов
В методе create мы создаём два графических объекта из одного и того же изображения 'block'. Первый объект, marker, служит статичным указателем исходной позиции. Его прозрачность уменьшена с помощью setAlpha(0.3), чтобы визуально отделить от движущегося объекта.
Второй объект, image, — это тот самый спрайт, который мы будем анимировать. Изначально он помещён в ту же точку (100, 100), что и маркер.
var marker = this.add.image(100, 100, 'block').setAlpha(0.3);
var image = this.add.image(100, 100, 'block');
Настройка и запуск твина с задержкой
Самое интересное — создание анимации с помощью менеджера твинов this.tweens.add. Конфигурационный объект твина содержит несколько ключевых параметров:
* targets: объект или массив объектов для анимации.
* `x`: конечная координата по оси X.
* ease: функция плавности анимации ('Power1').
* duration: длительность основного движения в миллисекундах (3000 мс = 3 сек).
* delay: время задержки *перед началом* анимации в миллисекундах (2000 мс = 2 сек).
Именно параметр delay отвечает за паузу между созданием твина и стартом перемещения спрайта из точки (100, 100) в точку (600, 100).
var tween = this.tweens.add({
targets: image,
x: 600,
ease: 'Power1',
duration: 3000,
delay: 2000
});
Конфигурация игры и запуск
Код завершается стандартной для Phaser 3 конфигурацией игры. В объекте config задаются тип рендерера, размеры холста, цвет фона, ID родительского HTML-элемента и класс основной сцены. После этого создаётся экземпляр игры new Phaser.Game(config), который инициализирует и запускает всё описанное выше.
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что попробовать дальше
Свойство delay в твинах Phaser 3 — это простой, но крайне полезный инструмент для точного управления временем в анимациях. Оно позволяет легко создавать последовательности действий, паузы для драматического эффекта или синхронизацию движения нескольких объектов.
Для экспериментов попробуйте:
1. Анимировать несколько спрайтов с разными задержками, создав "волну" движений.
2. Комбинировать delay с другими свойствами твина, например, repeat или yoyo, чтобы создать сложные циклические анимации с паузами между фазами.
3. Динамически задавать задержку в зависимости от игровых событий, например, увеличивая паузу с каждым новым уровнем.
