О чем этот пример
Phaser предоставляет мощный объект `Graphics` для рисования векторной графики прямо во время выполнения игры. Это открывает двери для создания динамических интерфейсов, эффектов, визуализаций данных или даже простых геометрических объектов без использования отдельных текстур. В этой статье мы разберем, как использовать этот инструмент, рисуя серию полупрозрачных прямоугольников. Умение работать с `Graphics` полезно, когда вам нужно быстро нарисовать что-то простое (например, индикатор здоровья или область для отладки коллизий), сгенерировать уникальную форму или создать сложные визуальные эффекты, которые трудно реализовать с помощью спрайтов.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const graphics = this.add.graphics();
for (let i = 0; i < 11; ++i)
{
const color = 0xffff00;
const alpha = 0.5 + ((i / 10) * 0.5);
graphics.fillStyle(color, alpha);
graphics.fillRect(32 * i, 32 * i, 256, 256);
}
}
}
const config = {
width: 800,
height: 600,
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Создание и настройка объекта Graphics
Вся работа начинается с создания объекта Graphics. Это холст для векторного рисования.
const graphics = this.add.graphics();
Метод this.add.graphics() создает и добавляет на сцену новый объект Graphics. С этого момента мы можем использовать его методы для задания стилей и рисования фигур. Объект автоматически становится дочерним для сцены и будет отрендерен в рамках её дисплейного списка.
Управление стилем заливки: цвет и прозрачность
Перед рисованием фигуры необходимо задать её стиль. Для заливаемых фигур используется метод fillStyle.
graphics.fillStyle(color, alpha);
Здесь:
- color — это числовое значение цвета в формате 0xRRGGBB (например, 0xffff00 — ярко-желтый).
- alpha — значение прозрачности (альфа-канал) в диапазоне от 0.0 (полностью прозрачный) до 1.0 (полностью непрозрачный).
В нашем примере цвет постоянный, а прозрачность меняется в цикле, создавая градиентный эффект.
Рисование прямоугольника: координаты и размеры
Основная фигура в примере — прямоугольник, который рисуется методом fillRect.
graphics.fillRect(32 * i, 32 * i, 256, 256);
Метод принимает четыре аргумента:
1. `x— координата X верхнего левого угла прямоугольника на холстеGraphics`.
2. `y` — координата Y верхнего левого угла.
3. width — ширина прямоугольника.
4. height — высота прямоугольника.
В цикле координаты `xиyувеличиваются с каждой итерацией (32 * i`), что заставляет каждый новый прямоугольник смещаться вниз и вправо относительно предыдущего, образуя диагональную цепочку.
Логика цикла: создание последовательности
Весь рисунок генерируется в цикле for. Давайте разберем его логику.
for (let i = 0; i < 11; ++i) {
const color = 0xffff00;
const alpha = 0.5 + ((i / 10) * 0.5);
// ... установка стиля и рисование ...
}
- Цикл выполняется 11 раз (`i` от 0 до 10).
- Цвет (0xffff00) задается константой для всех итераций.
- Прозрачность (alpha) вычисляется динамически. Выражение (i / 10) дает значение от 0.0 до 1.0. Умножив его на 0.5 и прибавив 0.5, мы получаем диапазон альфа-канала от 0.5 (при i=0) до 1.0 (при i=10). Таким образом, каждый следующий прямоугольник будет менее прозрачным, чем предыдущий.
Что попробовать дальше
Объект Graphics — это гибкий инструмент для программного рисования в Phaser. Как видно из примера, комбинируя простые методы в цикле, можно создавать сложные и интересные визуальные паттерны. Для экспериментов попробуйте изменить форму (используйте fillCircle или fillTriangle), добавить обводку с помощью lineStyle и strokeRect или управлять цветом в цикле, создавая радужный градиент. Это отличная основа для создания кастомных эффектов частиц или динамических элементов HUD.
