О чем этот пример

Визуальные эффекты, такие как звёздная пыль, огонь или магические вспышки, оживляют игровой мир. В Phaser 3 система частиц (Particle Emitter) позволяет создавать такие эффекты буквально парой строк кода, без необходимости работать с тяжёлыми графическими редакторами или сложными шейдерами. Эта статья покажет, как быстро добавить базовый эффект частиц в вашу сцену, используя загруженное изображение и простую конфигурацию.

Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.

Живой запуск

Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.

Исходный код


class Example extends Phaser.Scene
{
    preload ()
    {
        this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
        this.load.image('star', 'assets/demoscene/star3.png');
    }

    create ()
    {
        this.add.particles(400, 200, 'star', {
            speed: 100,
            lifespan: 3000,
            gravityY: 200
        });
    }
}

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#000',
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Подготовка сцены и загрузка ассетов

Как и в любой сцене Phaser, нам нужно загрузить изображение, которое будет служить нашей частицей. В данном примере это изображение звезды (star3.png).

preload ()
{
    this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
    this.load.image('star', 'assets/demoscene/star3.png');
}

Здесь setBaseURL задаёт базовый URL для загрузки, что удобно, если ваши ассеты лежат в одной папке. Затем метод load.image регистрирует текстуру с ключом 'star'. Этот ключ мы будем использовать позже для создания эмиттера.

Создание эмиттера частиц

Основная магия происходит в методе create. Именно здесь создаётся и запускается эмиттер частиц с помощью this.add.particles.

create ()
{
    this.add.particles(400, 200, 'star', {
        speed: 100,
        lifespan: 3000,
        gravityY: 200
    });
}

Первые два аргумента (400, 200) — это координаты X и Y, где будет находиться источник эмиттера на сцене. Третий аргумент ('star') — это ключ текстуры, загруженной на этапе preload. Четвёртый аргумент — объект конфигурации, который определяет поведение частиц.

Настройка поведения частиц

Конфигурационный объект — это сердце нашего эффекта. Давайте разберём каждое из использованных свойств.

{
    speed: 100,
    lifespan: 3000,
    gravityY: 200
}

* speed: 100 — задаёт начальную скорость движения частицы в пикселях в секунду. Частицы будут вылетать из источника с этой скоростью в случайном направлении. * lifespan: 3000 — определяет время жизни каждой частицы в миллисекундах (3000 мс = 3 секунды). После этого частица автоматически уничтожается. * gravityY: 200 — имитирует силу гравитации по оси Y. Положительное значение означает, что гравитация тянет частицы вниз, заставляя их падать после вылета. Это создаёт классический эффект "фейерверка" или падающих искр.

Конфигурация игры и запуск

Финальный шаг — создание экземпляра игры с конфигурационным объектом. Этот объект определяет базовые параметры всего приложения.

const config = {
    type: Phaser.AUTO,
    width: 800,
    height: 600,
    backgroundColor: '#000',
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Здесь мы задаём размеры холста (800x600), чёрный фон (backgroundColor), указываем контейнер в HTML (parent), который должен иметь id='phaser-example', и передаём нашу сцену Example. Создание экземпляра Phaser.Game с этой конфигурацией автоматически запускает игровой цикл.

Что попробовать дальше

Вы только что создали работающую систему частиц в Phaser 3. Эмиттер будет непрерывно испускать звёзды из точки (400, 200), которые разлетаются в стороны и падают под действием гравитации. Для экспериментов попробуйте изменить параметры конфигурации: увеличьте lifespan до 10000, чтобы частицы жили дольше; установите gravityY: -100, чтобы они улетали вверх; или измените speed на 0, чтобы создать эффект статичного облака. Также попробуйте использовать другие текстуры для частиц — от простых кругов до сложных спрайтов.