О чем этот пример
Эффекты постобработки (PostFX) в Phaser 3 — мощный инструмент для визуального обогащения игр. В этом примере мы рассмотрим, как применить эффект Wipe (стирания) к спрайту для создания плавной анимации его появления и исчезновения. Этот подход идеально подходит для создания переходов, акцентов на объектах или атмосферных эффектов без необходимости анимировать саму текстуру.
Версия 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('pyramid', 'assets/sprites/pyramid.png');
this.load.image('bg', 'assets/skies/space4.png');
}
create ()
{
this.add.image(400, 300, 'bg');
this.pyramid = this.add.image(400, 300, 'pyramid');
this.fx = this.pyramid.postFX.addWipe(0.1, 1, 1);
this.fadeOutPyramid();
}
fadeInPyramid()
{
this.fx.progress = 0;
this.fx.reveal = true;
this.tweens.add({
targets: this.fx,
progress: 1,
duration: 2000,
callbackScope: this,
onComplete: () => {
this.fadeOutPyramid();
}
});
}
fadeOutPyramid()
{
this.fx.progress = 0;
this.fx.reveal = false;
this.tweens.add({
targets: this.fx,
progress: 1,
duration: 2000,
callbackScope: this,
onComplete: () => {
this.fadeInPyramid();
}
});
}
}
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#0a0067',
parent: 'phaser-example',
scene: Example
};
let game = new Phaser.Game(config);
Инициализация сцены и загрузка ассетов
В начале примера мы создаём класс сцены Example. В методе preload загружаются необходимые изображения: фон (bg) и спрайт пирамиды (pyramid). Обратите внимание на использование this.load.setBaseURL, который устанавливает базовый URL для загрузчиков, что удобно при работе с ресурсами из удалённого репозитория.
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.image('pyramid', 'assets/sprites/pyramid.png');
this.load.image('bg', 'assets/skies/space4.png');
}
Создание сцены и применение эффекта Wipe
В методе create мы добавляем фон и спрайт пирамиды в центр экрана. Ключевой момент — применение PostFX-эффекта Wipe к спрайту pyramid. Это делается с помощью метода postFX.addWipe, который возвращает объект эффекта (fx). Параметры метода определяют начальное состояние эффекта.
create ()
{
this.add.image(400, 300, 'bg');
this.pyramid = this.add.image(400, 300, 'pyramid');
this.fx = this.pyramid.postFX.addWipe(0.1, 1, 1);
this.fadeOutPyramid();
}
Эффект Wipe работает по принципу маски, которая "стирает" или "проявляет" изображение в зависимости от значения progress (от 0 до 1) и флага reveal.
Анимация исчезновения (fadeOutPyramid)
Метод fadeOutPyramid отвечает за анимацию скрытия пирамиды. Сначала сбрасывается прогресс эффекта (progress = 0), а флаг reveal устанавливается в false. Это означает, что при увеличении progress изображение будет стираться. Затем создаётся твин, который плавно увеличивает progress до 1 за 2000 миллисекунд. По завершении твина вызывается метод fadeInPyramid, создавая циклическую анимацию.
fadeOutPyramid()
{
this.fx.progress = 0;
this.fx.reveal = false;
this.tweens.add({
targets: this.fx,
progress: 1,
duration: 2000,
callbackScope: this,
onComplete: () => {
this.fadeInPyramid();
}
});
}
Анимация появления (fadeInPyramid)
Метод fadeInPyramid зеркален предыдущему. Он также сбрасывает progress, но устанавливает reveal в true. В этом режиме увеличение progress приводит к постепенному проявлению изображения из прозрачности. После завершения твина цепочка замыкается вызовом fadeOutPyramid.
fadeInPyramid()
{
this.fx.progress = 0;
this.fx.reveal = true;
this.tweens.add({
targets: this.fx,
progress: 1,
duration: 2000,
callbackScope: this,
onComplete: () => {
this.fadeOutPyramid();
}
});
}
Использование callbackScope: this гарантирует, что внутри колбэка onComplete контекст this будет указывать на экземпляр сцены.
Конфигурация игры и запуск
Объект config определяет основные настройки игры: тип рендерера, размеры холста, цвет фона и класс сцены. Экземпляр Phaser.Game инициализирует игру с этой конфигурацией.
const config = {
type: Phaser.AUTO,
width: 800,
height: 600,
backgroundColor: '#0a0067',
parent: 'phaser-example',
scene: Example
};
let game = new Phaser.Game(config);
Что попробовать дальше
Эффект Wipe PostFX предоставляет простой, но эффективный способ анимировать появление и исчезновение объектов в Phaser 3, управляя всего двумя свойствами: progress и reveal. Для экспериментов попробуйте изменить направление стирания, передав другие значения в addWipe, применить эффект к группе спрайтов или связать прогресс эффекта с действиями игрока (например, нажатием клавиши). Также можно комбинировать Wipe с другими PostFX-эффектами для создания более сложных визуальных переходов.
