ParticleEmitter: создание и настройка

ParticleEmitter в Phaser представляет собой объект, предназначенный для генерации частиц с различными свойствами, такими как скорость, направление, масштаб, прозрачность и цвет. Частицы создаются на основе ParticleManager, который управляет их рендерингом и обновлением состояния. Эмиссия частиц позволяет создавать визуальные эффекты вроде огня, дыма, искр, дождя и снега.

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

Для создания эмиттера используется следующий синтаксис:

const particles = this.add.particles('particleTexture');

const emitter = particles.createEmitter({
    x: 400,
    y: 300,
    speed: { min: 100, max: 200 },
    angle: { min: 0, max: 360 },
    lifespan: 2000,
    quantity: 5,
    scale: { start: 1, end: 0 },
    alpha: { start: 1, end: 0 },
    blendMode: 'ADD'
});

Ключевые параметры:

  • x и y — координаты появления частиц.
  • speed — скорость движения частиц, может быть числом или объектом с диапазоном {min, max}.
  • angle — направление движения в градусах, может задаваться диапазоном.
  • lifespan — время жизни частицы в миллисекундах.
  • quantity — количество частиц, выпускаемых за один шаг эмиссии.
  • scale — масштаб частицы, может меняться во времени.
  • alpha — прозрачность, также может изменяться динамически.
  • blendMode — режим смешивания, например ADD для светящихся эффектов.

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

Эмиссия частиц поддерживает разнообразные эффекты благодаря изменяемым свойствам:

  1. Скорость и направление Возможна генерация частиц с фиксированной скоростью или с диапазоном значений. Комбинируя speed и angle, создаются эффекты взрыва, потока или водопада.

  2. Жизненный цикл Свойство lifespan определяет, как долго частица будет существовать. Можно задать диапазон, чтобы эффект выглядел более естественно.

  3. Масштаб и прозрачность Динамическая настройка scale и alpha позволяет частицам постепенно уменьшаться и исчезать, создавая плавные переходы.

  4. Гравитация и ускорение Эмиссия поддерживает физические воздействия:

    emitter.setGravityY(300);
    emitter.setAccelerationX({ min: -50, max: 50 });

    Частицы могут падать вниз, ускоряться в сторону или изменять траекторию в процессе движения.

  5. Повтор и задержка Управление частотой выпуска частиц:

    • frequency — интервал между генерацией новых частиц.
    • delay — задержка перед запуском эмиттера.
    • repeat — количество повторов цикла эмиссии.

Работа с текстурами и анимациями

Эмиттер может использовать одну текстуру или анимацию:

const emitter = particles.createEmitter({
    frame: ['spark1', 'spark2', 'spark3'],
    speed: { min: 100, max: 300 },
    lifespan: 1000
});

Использование нескольких кадров создает иллюзию анимированных частиц. Для плавности анимации рекомендуется комбинировать с alpha и scale.

Взаимодействие с объектами

Эмиссия может быть привязана к объектам:

emitter.startFollow(player, 0, 0);
  • Частицы будут появляться относительно положения объекта player.
  • Параметры смещения позволяют настраивать точку выпуска частиц на спрайте.

Также возможна активация частиц по событиям:

player.on('jump', () => {
    emitter.explode(10, player.x, player.y);
});
  • Метод explode создает мгновенный выброс указанного числа частиц.
  • Используется для эффектов столкновения, взрыва или магических спеллов.

Режимы смешивания и визуальные эффекты

BlendMode определяет, как частицы накладываются друг на друга:

  • NORMAL — стандартное смешение.
  • ADD — создаёт яркие, светящиеся эффекты.
  • MULTIPLY — затемнение и усиление цветовых комбинаций.

Комбинируя прозрачность, масштаб и blendMode, можно создавать реалистичные огненные или дымовые эффекты.

Управление производительностью

Для оптимизации важно учитывать:

  • Ограничение количества частиц (maxParticles).
  • Использование texture atlas вместо отдельных изображений.
  • Применение ParticleManager к нескольким эмиттерам для уменьшения нагрузки на GPU.
  • Плавное завершение эмиттера методом stop() вместо мгновенного уничтожения, чтобы избежать резкого исчезновения частиц.

Примеры сложных эффектов

  1. Взрыв с дымом и искрами

    • Основной эмиттер для огня и искр с коротким lifespan.
    • Вторичный эмиттер для дыма с большим lifespan и медленной скоростью.
  2. Магический след за персонажем

    • Эмиттер, привязанный к спрайту, с изменяющимся цветом и плавным исчезновением частиц.
  3. Дождь или снег

    • Частицы с большой длиной жизни и направлением вниз.
    • Легкое отклонение по горизонтали создаёт естественный эффект падения.

Методы управления эмиттером

  • start() — запуск эмиссии.
  • stop() — плавное прекращение генерации частиц.
  • explode(quantity, x, y) — мгновенная генерация частиц.
  • pause() и resume() — временное приостановление и продолжение эмиссии.

Эти методы позволяют гибко интегрировать частицы в игровые события и анимации.


Наличие детальной настройки ParticleEmitter делает Phaser мощным инструментом для создания динамичных и визуально привлекательных эффектов. Использование всех перечисленных параметров в комбинации позволяет моделировать сложные природные и фантастические явления с минимальными затратами ресурсов.