О чем этот пример
Визуальное разнообразие — ключ к удержанию внимания игрока. Часто простые геометрические фигуры выглядят скучно и технично. В Phaser 3 Graphics API есть мощный, но малоизвестный метод `lineGradientStyle()`, который позволяет рисовать линии с плавным цветовым переходом. Это простой способ добавить динамики статичным интерфейсам, силовым полям, лазерным лучам или траекториям полёта без использования тяжёлых текстур или шейдеров.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const graphics = this.add.graphics();
graphics.lineGradientStyle(128, 0xff0000, 0xff0000, 0x0000ff, 0x0000ff, 1);
graphics.lineBetween(100, 100, 600, 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();
Эта строка в методе create() создаёт новый объект Graphics и добавляет его на сцену. Объект хранится в переменной graphics, через которую мы будем вызывать все методы рисования.
Настройка стиля градиентной линии
Сердце нашего примера — метод lineGradientStyle(). Он определяет, как будет выглядеть последующая линия. Важно настроить стиль *перед* командой рисования линии.
graphics.lineGradientStyle(128, 0xff0000, 0xff0000, 0x0000ff, 0x0000ff, 1);
Разберём его параметры по порядку:
1. 128 — Толщина линии в пикселях.
2. 0xff0000 — Цвет градиента в начальной точке (в формате HEX, здесь — красный).
3. 0xff0000 — Цвет градиента в начальной точке для альфа-канала (обычно совпадает с основным цветом).
4. 0x0000ff — Цвет градиента в конечной точке (синий).
5. 0x0000ff — Цвет градиента в конечной точке для альфа-канала.
6. `1` — Альфа (прозрачность) всей линии от 0 до 1.
Градиент автоматически рассчитывается между начальной и конечной точками линии, которую мы нарисуем следующей.
Рисование линии
После настройки стиля мы рисуем саму линию с помощью метода lineBetween(). Он принимает координаты начальной и конечной точек на холсте игры.
graphics.lineBetween(100, 100, 600, 500);
Параметры метода:
- 100, 100 — координаты X и Y начальной точки.
- 600, 500 — координаты X и Y конечной точки.
Phaser возьмёт установленный ранее градиентный стиль и нарисует линию толщиной 128 пикселя, цвет которой плавно перейдёт от красного в начальной точке к синему в конечной.
Конфигурация игры
Код сцены должен быть запущен в рамках игрового экземпляра Phaser. Для этого определяется конфигурационный объект.
const config = {
width: 800,
height: 600,
type: Phaser.WEBGL,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Ключевой момент здесь — type: Phaser.WEBGL. Градиенты для линий и некоторые другие эффекты Graphics работают только в контексте WebGL. Если указать Phaser.CANVAS, градиент отрисуется не будет. Параметр parent указывает ID HTML-элемента, в который будет встроен canvas игры.
Что попробовать дальше
Метод lineGradientStyle() — это лаконичный и производительный инструмент для создания визуально привлекательных линий. Для экспериментов попробуйте анимировать градиент, меняя цвета или позиции точек во времени в методе update(). Можно рисовать не одну линию, а целые узоры или контуры сложных фигур, создавая эффекты энергетических щитов, неоновых надписей или цветных траекторий для врагов.
