О чем этот пример
Отрисовка геометрических фигур — частый этап в разработке игр, будь то создание интерфейсов, эффектов или прототипирования. Стандартные заливки и обводки могут выглядеть скучно. В этой статье мы разберем, как с помощью объекта `Graphics` и метода `lineGradientStyle()` создавать треугольники с динамичными градиентными обводками, что мгновенно добавляет визуальную глубину и стиль вашим игровым элементам. Этот простой прием позволяет оживить даже базовые формы без использования тяжеловесных текстур.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const graphics = this.add.graphics();
graphics.lineGradientStyle(8, 0xff0000, 0x0000ff, 0xff0000, 0x0000ff, 1);
graphics.strokeTriangle(200, 200, 400, 50, 500, 300);
graphics.lineGradientStyle(6, 0xffff00, 0xff00ff, 0xff0000, 0x0000ff, 1);
graphics.strokeTriangle(60, 500, 60, 400, 500, 500);
}
}
const config = {
width: 800,
height: 600,
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Создаем холст для рисования: объект Graphics
Вся работа с векторной графикой в Phaser начинается с создания объекта Graphics. Это специальный игровой объект, который служит программным холстом для рисования линий, фигур и заливок.
const graphics = this.add.graphics();
Строка выше создает новый объект Graphics и добавляет его на сцену. Переменная graphics становится нашим инструментом для всех последующих операций рисования. Важно, что объект создается через this.add, что автоматически делает его частью сцены и системы отображения.
Настраиваем стиль линии: метод lineGradientStyle
Перед тем как рисовать фигуру, необходимо задать стиль ее обводки. Метод lineGradientStyle() определяет градиент для линий.
graphics.lineGradientStyle(8, 0xff0000, 0x0000ff, 0xff0000, 0x0000ff, 1);
Разберем его аргументы по порядку: 1. **Толщина линии (8):** Задает ширину обводки в пикселях. 2. **Цвет верхнего левого угла (0xff0000):** Начальный цвет градиента (в данном случае красный). 3. **Цвет верхнего правого угла (0x0000ff):** Конечный цвет градиента для верхней границы (синий). 4. **Цвет нижнего левого угла (0xff0000):** Начальный цвет градиента для нижней границы (красный). 5. **Цвет нижнего правого угла (0x0000ff):** Конечный цвет градиента (синий). 6. **Альфа-канал (1):** Прозрачность линии, где 1 — полностью непрозрачная.
Метод создает линейный градиент, который интерполируется между заданными цветами по углам ограничивающего прямоугольника фигуры. Это ключевой момент для создания разноцветных обводок.
Рисуем фигуру: метод strokeTriangle
После настройки стиля можно приступать к рисованию. Метод strokeTriangle() создает контур треугольника (без заливки) по трем точкам.
graphics.strokeTriangle(200, 200, 400, 50, 500, 300);
Каждая пара чисел — это координаты `xиyвершины треугольника на холсте сцены. Порядок вершин может быть любым. Phaser соединит точки линиями, используя заданный ранее стиль изlineGradientStyle`. Обводка будет следовать форме треугольника, а градиент будет рассчитан относительно его воображаемого ограничивающего прямоугольника.
Комбинируем стили: рисуем несколько фигур
Один объект Graphics может последовательно рисовать множество фигур с разными стилями. Для этого нужно просто вызвать lineGradientStyle() с новыми параметрами перед рисованием следующей фигуры.
graphics.lineGradientStyle(6, 0xffff00, 0xff00ff, 0xff0000, 0x0000ff, 1);
graphics.strokeTriangle(60, 500, 60, 400, 500, 500);
В этом примере мы меняем толщину линии на 6 пикселей и цвет градиента, используя желтый (0xffff00) и пурпурный (0xff00ff) для верхних углов, сохраняя красный и синий для нижних. Это демонстрирует, как легко менять внешний вид примитивов на лету, используя один и тот же объект для рисования.
Что попробовать дальше
Использование lineGradientStyle со strokeTriangle — это мощный и легкий способ добавить визуальный интерес к вашей игре. Вы можете экспериментировать: анимировать цвета градиента, изменяя их в игровом цикле update; рисовать более сложные многоугольники, комбинируя треугольники; или использовать эту технику для создания ярких контуров интерфейсных элементов и спецэффектов. Это отличная альтернатива текстурам для динамически генерируемой графики.
