Частицы
Эмиттер частиц — типичные эффекты, анатомия конфигурации и компромиссы производительности, которые действительно важны.
Эмиттер частиц порождает множество короткоживущих спрайтов со случайными свойствами и (опционально) интерполированным временем жизни. В Phaser 4 поставляется единый класс эмиттера, который покрывает всё — от дымового шлейфа до сотрясающего экран взрыва.
Структура эмиттера
const emitter = this.add.particles(0, 0, 'spark', {
speed: { min: 80, max: 160 },
angle: { min: 250, max: 290 },
scale: { start: 1, end: 0 },
alpha: { start: 1, end: 0 },
lifespan: 600,
frequency: 30, // мс между испусканиями; -1 означает «режим взрыва»
quantity: 1, // частиц за одно испускание
blendMode: 'ADD',
});
emitter.startFollow(player);
Две ключевые идеи:
- Случайность для каждой частицы через объекты-диапазоны.
speed: { min, max }рандомизирует начальное значение;scale: { start, end }интерполирует от начального к конечному значению на протяжении времени жизни частицы. - Темп для всего эмиттера через
frequency+quantity. Вместе они задают «частиц в секунду».frequency: -1переключает в режим взрыва — испуститьquantityчастиц одновременно при вызовеemitter.explode().
Живой пример
Непрерывный шлейф искр, следующий за невидимой целью, движущейся по окружности.
Режим взрыва
const burst = this.add.particles(0, 0, 'spark', {
speed: { min: 120, max: 260 },
lifespan: 500,
scale: { start: 1, end: 0 },
emitting: false, // не испускать автоматически
});
// Позже, по событию:
burst.emitParticleAt(player.x, player.y, 30);
emitting: false — это ключ — он подавляет непрерывный поток, чтобы можно было запускать всплески вручную.
Зоны эмиттера
Порождайте или уничтожайте частицы в произвольных формах:
const emitter = this.add.particles(0, 0, 'spark', {
emitZone: { type: 'edge', source: new Phaser.Geom.Circle(0, 0, 50), quantity: 64 },
// или 'random' для заполнения области порождением
});
emitZone управляет тем, где частицы рождаются; deathZone удаляет любые, попадающие в заданную форму — полезно для эффекта «частицы поглощаются предметом».
Типичные рецепты
Дым — медленный, крупный, затухающий, без аддитивного смешивания.
{ speed: 20, scale: { start: 0.4, end: 1.6 }, alpha: { start: 0.6, end: 0 },
lifespan: 1500, frequency: 80, blendMode: 'NORMAL' }
Взрыв — быстрый, аддитивный, единичный всплеск.
{ speed: { min: 200, max: 400 }, scale: { start: 1, end: 0 },
lifespan: 400, blendMode: 'ADD', emitting: false }
// ...затем emitter.explode(50, x, y);
Шлейф — высокая частота, короткое время жизни, следует за целью.
{ speed: 10, scale: { start: 0.5, end: 0 }, lifespan: 200,
frequency: 10, follow: target, blendMode: 'ADD' }
Производительность
- Смешивание
ADD— самая дорогая операция. Переключитесь наNORMAL, если эффект свечения не нужен. - Размер текстуры частицы важнее их количества. Эмиттер на 1000 частиц с искрами 8×8 дешевле, чем 100 частиц с клубами 256×256.
- Ограничивайте одновременное число частиц с помощью
maxParticles— это предотвращает патологические всплески, когда произведение frequency × lifespan становится большим.
Связанные материалы
- Игровые объекты — менеджер частиц сам является игровым объектом и может быть добавлен в контейнеры.
- Шейдеры — для эффектов, выходящих за пределы того, что можно выразить режимами смешивания.