О чем этот пример
Система частиц — один из самых эффектных инструментов для создания динамичной графики в играх. Phaser 3 предоставляет мощный и гибкий Particle Emitter. В этой статье мы сосредоточимся на настройке цвета частиц с помощью свойства `tint`. Вы узнаете, как сделать простой эмиттер более живым, задав ему градиент из нескольких цветов, что позволит легко создавать разноцветные взрывы, магические эффекты или красочные фейерверки.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.55.2.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.atlas('flares', 'assets/particles/flares.png', 'assets/particles/flares.json');
}
create ()
{
const particles = this.add.particles('flares');
particles.createEmitter({
frame: 'white',
x: 400,
y: 300,
speed: 100,
tint: [ 0xffff00, 0xff0000, 0x00ff00, 0x0000ff ],
lifespan: 2000,
frequency: 50,
blendMode: 'ADD'
});
}
}
const config = {
type: Phaser.WEBGL,
width: 800,
height: 600,
backgroundColor: '#000',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Загрузка атласа частиц
Перед созданием эмиттера необходимо загрузить текстуру с частицами. В Phaser для этого часто используется атлас — изображение, содержащее несколько кадров (спрайтов) частиц в одном файле, и JSON-файл с координатами этих кадров.
В методе preload() мы задаем базовый URL для загрузки и загружаем атлас с ключом 'flares'. В качестве текстуры используется изображение flares.png, а данные о кадрах берутся из flares.json.
preload ()
{
this.load.setBaseURL('https://raw.githubusercontent.com/phaserjs/examples/master/public/');
this.load.atlas('flares', 'assets/particles/flares.png', 'assets/particles/flares.json');
}
Создание эмиттера и настройка базовых параметров
В методе create() мы создаем менеджер частиц и сразу на нем — эмиттер. Ключевой параметр frame указывает, какой конкретный кадр из атласа 'flares' использовать для всех частиц этого эмиттера. В нашем случае это белая текстура ('white'), которую мы будем окрашивать.
Координаты `xиyзадают точку испускания частиц.speedопределяет их начальную скорость.lifespan— время жизни частицы в миллисекундах, аfrequency` — интервал между испусканием новых частиц (чем меньше число, тем чаще они появляются).
const particles = this.add.particles('flares');
particles.createEmitter({
frame: 'white',
x: 400,
y: 300,
speed: 100,
lifespan: 2000,
frequency: 50,
blendMode: 'ADD'
});
Параметр blendMode: 'ADD' устанавливает режим наложения цвета частиц на фон. Режим ADD (сложение) делает яркие частицы еще ярче, создавая эффект свечения, что идеально подходит для огня, света или магии.
Магия свойства tint: градиент цвета
Самая интересная часть — массив tint. Именно он превращает однотонные белые частицы в разноцветный поток. Свойство tint применяет цветовой оттенок к текстуре частицы.
Если передать массив из нескольких цветов в шестнадцатеричном формате (например, 0xffff00 — желтый), Phaser будет случайным образом выбирать один из этих цветов для каждой вновь созданной частицы.
В нашем примере палитра состоит из желтого, красного, зеленого и синего цветов. Это создает эффект радуги или конфетти.
tint: [ 0xffff00, 0xff0000, 0x00ff00, 0x0000ff ]
Важно помнить, что tint работает с исходной текстурой частицы. Поэтому выбран белый кадр ('white') — он лучше всего подходит для тонирования, так как не искажает итоговый цвет.
Конфигурация игры и запуск сцены
Финальный шаг — создание экземпляра игры с конфигурационным объектом. В нем мы указываем тип рендерера (WEBGL необходим для корректной работы режимов наложения, таких как ADD), размеры холста, цвет фона и класс главной сцены.
const config = {
type: Phaser.WEBGL,
width: 800,
height: 600,
backgroundColor: '#000',
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Черный фон ('#000') выбран для наилучшего контраста с яркими, цветными частицами.
Что попробовать дальше
Использование массива tint — простой и мощный способ добавить визуальное разнообразие системе частиц. Вы можете экспериментировать: попробуйте создать несколько эмиттеров с разными палитрами tint и позициями, измените blendMode на NORMAL или MULTIPLY, чтобы увидеть, как это влияет на смешивание с фоном. Также попробуйте анимировать изменение цвета, динамически модифицируя массив tint у уже работающего эмиттера через его свойства.
