О чем этот пример
Плавная анимация — ключ к приятной игровой механике. В Phaser система Tween предоставляет мощные инструменты для создания сложных движений. В этой статье мы разберем, как использовать параметр `easeParams` для настройки упругого эффекта (`Elastic`), который имитирует движение пружины. Вы научитесь контролировать амплитуду и период колебаний, добавляя объектам в вашей игре ощущение веса и инерции.
Версия 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, 300, 'block').setAlpha(0.3);
var image = this.add.image(100, 300, 'block');
this.tweens.add({
targets: image,
x: 600,
duration: 3000,
ease: 'Elastic',
easeParams: [1.5, 0.5],
delay: 1000
});
}
}
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Подготовка сцены и загрузка ассетов
Вся логика примера находится в классе сцены Example. В методе preload() мы загружаем спрайт, который будет анимироваться. Обратите внимание на использование setBaseURL — это удобно для указания базового пути к ресурсам.
preload() {
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('block', 'assets/sprites/block.png');
}
Создание визуальных маркеров и цели анимации
В методе create() мы создаем два изображения из одного спрайта. Первое, marker, служит статичным ориентиром (его прозрачность уменьшена). Второе, image, — это объект, который мы будем анимировать. Их начальные координаты совпадают.
create() {
var marker = this.add.image(100, 300, 'block').setAlpha(0.3);
var image = this.add.image(100, 300, 'block');
}
Настройка Tween с упругим эффектом
Сердце примера — создание твина. Мы передаем объект с конфигурацией в this.tweens.add(). Ключевые параметры:
* targets: объект для анимации.
* `x`: конечная координата по оси X.
* duration: длительность анимации в миллисекундах.
* ease: функция плавности. 'Elastic' создает колебания.
* easeParams: массив параметров для уточнения функции ease.
* delay: задержка перед началом анимации.
this.tweens.add({
targets: image,
x: 600,
duration: 3000,
ease: 'Elastic',
easeParams: [1.5, 0.5],
delay: 1000
});
Параметр easeParams специфичен для функции Elastic. Первое значение (1.5) определяет амплитуду колебаний — чем больше, тем сильнее "выброс" за конечную точку. Второе значение (0.5) задает период — чем меньше, тем чаще колебания.
Конфигурация игры
Стандартная конфигурация игры Phaser. Она определяет тип рендерера, размеры холста, цвет фона и корневую сцену.
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что попробовать дальше
Использование ease: 'Elastic' с параметрами easeParams — это простой способ добавить в игру динамичные, "живые" анимации. Экспериментируйте с этими параметрами, чтобы добиться разного ощущения: от едва заметной дрожи до сильного пружинящего отскока. Попробуйте применить этот твин не только к позиции (`x,y), но и к масштабу (scale) или углу поворота (angle`) объектов.
