Эмиттеры частиц в Phaser представляют собой мощный инструмент для создания визуальных эффектов, таких как огонь, дым, снег или магические вспышки. Для полноценного контроля над их поведением важно уметь останавливать, приостанавливать и перезапускать эмиттеры, чтобы они интегрировались в логику игры, реагировали на события и экономили ресурсы.
Остановка эмиттера полностью прекращает генерацию новых частиц, но уже существующие частицы продолжают свое движение до завершения их жизненного цикла.
emitter.stop() Этот метод мгновенно
прекращает эмиссию. Частицы, уже находящиеся в сцене, продолжают жить до
конца своей жизни. Пример:emitter.stop();
emitter.on = false Альтернатива для
более простого контроля: свойство on отключает генерацию
новых частиц, сохраняя текущие.emitter.on = false;
Особенность: остановка эмиттера не очищает его полностью. Частицы продолжают анимироваться, пока их время жизни не истечет.
Пауза позволяет временно приостановить работу эмиттера, сохранив текущее состояние. Отличие от остановки — эмиттер может быть легко возобновлен без необходимости заново конфигурировать параметры.
emitter.pause() При вызове этого
метода генерация частиц приостанавливается, а существующие частицы
продолжают двигаться по своим траекториям.emitter.pause();
emitter.resume() Возобновляет работу
паузированного эмиттера, продолжая создание новых частиц с момента
остановки.emitter.resume();
Примечание: В Phaser 3 пауза и возобновление
реализованы через управление active и paused
состояниями эмиттера:
emitter.paused = true; // пауза
emitter.paused = false; // возобновление
Перезапуск эмиттера используется, когда требуется полностью очистить старые частицы и начать генерацию заново с начальных настроек.
emitter.explode(count, x, y) Мгновенно
создаёт определённое количество частиц в указанной позиции, часто
применяется для эффектов взрыва. После вызова эмиссия может продолжаться
в обычном режиме.emitter.explode(50, 400, 300);
emitter.start() Полный перезапуск
эмиттера с текущими конфигурациями. Частицы начинают генерироваться
заново, даже если ранее эмиттер был остановлен или приостановлен.emitter.start();
emitter.removeAll(true) Используется
для очистки всех существующих частиц перед перезапуском. Опция
true гарантирует уничтожение активных частиц.emitter.removeAll(true);
emitter.start();
Совет: комбинация stop() +
removeAll(true) + start() позволяет полностью
сбросить эмиттер, что удобно при смене уровня или при перезапуске
эффекта.
Эмиттеры тесно интегрируются с системой событий Phaser. Использование событий позволяет более гибко контролировать паузу и перезапуск:
emitter.onParticleDeath.add(function(particle) {
console.log('Частица уничтожена');
});
this.time.delayedCall(2000, () => {
emitter.pause();
});
this.time.delayedCall(4000, () => {
emitter.resume();
});
emitter.on = false;
emitter.removeAll(true);
Экономия ресурсов: Если эффект временный,
предпочтительно использовать stop() и
removeAll(true) вместо полного создания нового
эмиттера.
Плавное управление: Для постепенного прекращения
эффекта полезно уменьшать frequency или
quantity частиц перед полной остановкой.
События игры: Привязывать паузу и перезапуск к игровым событиям, например при открытии меню или смене сцены, чтобы эффекты выглядели естественно и не перегружали рендер.
Разделение логики: Логику эмиттера лучше держать отдельно от основной игровой логики. Это облегчает перезапуск, изменение параметров и отладку.
| Свойство / Метод | Описание |
|---|---|
stop() |
Останавливает эмиссию, частицы продолжают жить |
pause() |
Приостанавливает эмиссию, состояние сохраняется |
resume() |
Возобновляет паузу эмиттера |
start() |
Перезапускает эмиттер с текущими настройками |
explode(count, x, y) |
Мгновенная генерация указанного числа частиц |
removeAll(true) |
Уничтожает все текущие частицы |
on |
Управление включением/выключением эмиттера |
paused |
Флаг паузы для управления через свойство |
Эффективное использование этих методов позволяет создавать динамичные, отзывчивые визуальные эффекты, интегрированные в игровую механику, и контролировать производительность даже при большом количестве эмиттеров.