О чем этот пример
Визуализация игровых областей, зон столкновений или индикаторов состояния — частые задачи при разработке. Использование готовых спрайтов не всегда удобно, особенно на ранних этапах. Phaser предоставляет встроенный инструмент `Graphics` для программного рисования примитивов прямо на канвасе. Эта статья покажет, как быстро создавать и накладывать цветные прямоугольники, что идеально подходит для прототипирования механик, отрисовки хитбоксов или создания простых элементов интерфейса.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const graphics = this.add.graphics();
graphics.fillStyle(0x00ff00, 1);
graphics.fillRect(100, 100, 256, 256);
graphics.fillStyle(0xff0000, 0.5);
graphics.fillRect(250, 200, 400, 256);
}
}
const config = {
width: 800,
height: 600,
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Создаем контекст для рисования
Весь процесс рисования примитивов в Phaser начинается с создания объекта Graphics. Этот объект является контейнером для графических команд и служит основным инструментом для векторного рисования.
const graphics = this.add.graphics();
Вызов this.add.graphics() создает новый объект Graphics и сразу добавляет его на сцену. Этот объект будет использоваться для всех последующих операций заливки и обводки.
Задаем цвет и прозрачность заливки
Перед тем как рисовать фигуру, необходимо задать стиль заливки. Для этого используется метод fillStyle. Он определяет, каким цветом и с какой прозрачностью будет заполнена внутренняя область фигуры.
graphics.fillStyle(0x00ff00, 1);
Первый параметр — это цвет в шестнадцатеричном формате (0x00ff00 — ярко-зеленый). Второй параметр — альфа-канал (прозрачность), где `1— полностью непрозрачный, а0` — полностью прозрачный.
Рисуем прямоугольник
После настройки стиля можно приступить к рисованию самой фигуры. Для создания залитого прямоугольника используется метод fillRect.
graphics.fillRect(100, 100, 256, 256);
Метод принимает четыре аргумента: координаты `xиyверхнего левого угла прямоугольника, а затем егоширинуивысоту`. В данном примере рисуется зеленый квадрат со стороной 256 пикселя, отстоящий от левого и верхнего края сцены на 100 пикселей.
Наложение фигур с разной прозрачностью
Сила объекта Graphics в том, что можно последовательно рисовать множество фигур с разными стилями. Каждый новый вызов fillStyle меняет стиль для всех последующих команд рисования.
graphics.fillStyle(0xff0000, 0.5);
graphics.fillRect(250, 200, 400, 256);
Здесь мы сначала меняем цвет заливки на красный (0xff0000) с полупрозрачностью (0.5). Затем рисуем новый прямоугольник, который частично перекроет первый. Благодаря прозрачности, в области пересечения будет виден смешанный цвет, что полезно для визуализации перекрывающихся зон.
Конфигурация игры и сцены
Чтобы пример заработал, необходимо определить конфигурацию игры и класс сцены. В конфиге указываются базовые параметры, такие как размер холста и тип рендерера.
const config = {
width: 800,
height: 600,
type: Phaser.WEBGL, // Используется WebGL-рендерер
parent: 'phaser-example', // ID контейнера в DOM
scene: Example // Главный класс сцены
};
const game = new Phaser.Game(config);
Класс сцены Example (показан в полном исходнике) содержит метод create, в котором и выполняется весь код рисования. Инициализация игры через new Phaser.Game(config) запускает весь процесс.
Что попробовать дальше
Объект Graphics — это ваш швейцарский нож для быстрого создания визуальных подсказок прямо в игре. С его помощью можно за пару строк кода отрисовать границы платформы, область действия заклинания или индикатор загрузки. Для экспериментов попробуйте: анимировать прямоугольник, изменяя его размеры или положение в методе update; рисовать более сложные фигуры, используя методы fillCircle или fillTriangle; комбинировать заливку с обводкой через lineStyle и strokeRect для контуров.
