О чем этот пример
В Phaser твины — это мощный инструмент для создания плавных анимаций. Часто требуется анимировать не один спрайт, а сразу несколько, например, для эффекта синхронного движения группы объектов. Встроенный менеджер `tweens` позволяет легко управлять множеством целей одним твином, что упрощает код и повышает производительность. В этой статье мы разберем пример, где три независимых спрайта анимируются одновременно с одинаковыми параметрами. Вы узнаете, как настроить такой групповой твин и какие возможности это открывает для ваших игр.
Версия 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 image1 = this.add.image(50, 100, 'block');
var image2 = this.add.image(60, 200, 'block');
var image3 = this.add.image(70, 300, 'block');
var tween = this.tweens.add({
targets: [image1, image2, image3],
x: '+=600',
y: '+=200',
duration: 4000,
ease: 'Power3'
});
console.log(tween);
}
}
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#2d2d2d',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Подготовка сцены и загрузка ассетов
Как и в любой сцене Phaser, мы начинаем с методов жизненного цикла. В preload загружается спрайт — в данном случае простая текстура 'block'. Важно использовать setBaseURL, чтобы указать базовый путь для загрузки ресурсов.
preload() {
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('block', 'assets/sprites/block.png');
}
Создание объектов и настройка группового твина
В методе create мы создаем три спрайта с изображением 'block', размещая их на разных стартовых позициях. Ключевой момент — создание твина с помощью this.tweens.add. Параметр targets принимает массив объектов, которые будут анимированы. В данном случае это массив [image1, image2, image3].
create() {
var image1 = this.add.image(50, 100, 'block');
var image2 = this.add.image(60, 200, 'block');
var image3 = this.add.image(70, 300, 'block');
var tween = this.tweens.add({
targets: [image1, image2, image3],
x: '+=600',
y: '+=200',
duration: 4000,
ease: 'Power3'
});
}
Параметры твина:
- x: '+=600' и y: '+=200' — относительное смещение от текущей позиции каждого спрайта.
- duration: 4000 — длительность анимации в миллисекундах.
- ease: 'Power3' — функция плавности, которая задает ускорение и замедление движения.
Как работает групповой твин
Когда твин запускается, он применяет указанные свойства (например, `xиy) ко всем объектам в массивеtargets. Каждый объект анимируется независимо, но с одинаковыми параметрами: смещением, длительностью и функцией плавности. Это эффективнее, чем создавать отдельный твин для каждого спрайта, так как менеджерtweens` оптимизирует обновление.
Твин возвращает объект (Tween), который можно использовать для контроля анимации — например, для паузы, возобновления или остановки. В примере он выводится в консоль для отладки.
console.log(tween);
Этот подход идеально подходит для синхронных анимаций, таких как движение пуль, исчезновение группы врагов или перемещение элементов интерфейса.
Что попробовать дальше
Использование групповых твинов в Phaser упрощает управление анимациями множества объектов. Вы можете экспериментировать, добавляя разные свойства (например, alpha для прозрачности или scale для размера), комбинируя твины в цепочки с yoyo или repeat, или применяя различные функции плавности из библиотеки Phaser. Попробуйте анимировать динамический массив объектов, который меняется во время игры — это откроет новые возможности для визуальных эффектов.
