О чем этот пример

Визуализация простых геометрических фигур — фундаментальный навык для создания интерфейсов, коллайдеров, зон поражения и декоративных элементов в играх. В этой статье мы разберем, как с помощью объекта `Phaser.Geom.Triangle` и контекста рисования `Graphics` быстро и эффективно отрисовывать треугольники на сцене. Этот подход позволит вам динамически создавать геометрию, не прибегая к загрузке текстур, что особенно полезно для прототипирования и визуализации игровой логики.

Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.

Живой запуск

Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.

Исходный код


class Example extends Phaser.Scene
{
    create ()
    {
        const graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00ff00 }, fillStyle: { color: 0xff0000 } });

        const triangle = new Phaser.Geom.Triangle(400, 100, 100, 500, 700, 500);

        // graphics.strokeTriangleShape(triangle);

        graphics.fillTriangleShape(triangle);
    }
}

const config = {
    width: 800,
    height: 600,
    type: Phaser.AUTO,
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

Создание контекста рисования (Graphics)

В Phaser для рисования примитивов, линий и фигур используется объект Graphics. Его можно представить как холст для векторной графики, который мы добавляем на сцену. При создании объекта сразу задаются стили для контура и заливки, которые будут применены ко всем последующим операциям рисования, пока стили не изменятся.

const graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00ff00 }, fillStyle: { color: 0xff0000 } });

В этом коде: - lineStyle определяет стиль контура: толщина 2 пикселя и зеленый цвет (0x00ff00). - fillStyle определяет стиль заливки: красный цвет (0xff0000). Объект graphics автоматически добавляется на сцену и становится ее дочерним элементом.

Определение геометрии треугольника

Для работы с треугольниками в Phaser есть отдельный класс Phaser.Geom.Triangle. Он представляет собой математическое описание фигуры и сам по себе ничего не рисует. Треугольник создается по координатам трех его вершин на плоскости сцены.

const triangle = new Phaser.Geom.Triangle(400, 100, 100, 500, 700, 500);

Здесь мы создаем треугольник с вершинами в точках: - A: x=400, y=100 (вершина сверху). - B: x=100, y=500 (нижний левый угол). - C: x=700, y=500 (нижний правый угол). Эти координаты задаются в пикселях относительно верхнего левого угла сцены. Таким образом, мы определили равнобедренный треугольник.

Визуализация треугольника на холсте

После создания геометрического объекта и контекста рисования необходимо передать фигуру для отображения. Объект Graphics предоставляет для этого два основных метода: strokeTriangleShape() для отрисовки контура и fillTriangleShape() для заливки фигуры.

// graphics.strokeTriangleShape(triangle); // Закомментированный вызов для контура
graphics.fillTriangleShape(triangle);

В примере закомментирован вызов метода для рисования контура, а используется метод fillTriangleShape(). Он берет ранее созданный объект triangle и заполняет его внутреннюю область красным цветом, как было задано в fillStyle. Если бы мы раскомментировали первую строку, то увидели бы зеленый контур треугольника поверх заливки. Методы принимают именно объект формы (Shape), поэтому в названии присутствует постфикс Shape.

Конфигурация и запуск игры

Весь код выполняется внутри сцены (Scene) Phaser. Чтобы игра запустилась, необходимо создать конфигурационный объект и инстанс игры.

const config = {
    width: 800,
    height: 600,
    type: Phaser.AUTO,
    parent: 'phaser-example',
    scene: Example
};

const game = new Phaser.Game(config);

В конфигурации: - width и height задают размеры игрового холста. - type определяет рендерер (WebGL или Canvas). Phaser.AUTO позволяет движку выбрать лучший из доступных. - parent — это ID HTML-элемента, в который будет встроен canvas. - scene указывает класс сцены, которая будет запущена сразу. В данном случае это наш класс Example, где определен метод create().

Что попробовать дальше

Вы научились создавать и отрисовывать геометрические треугольники, используя встроенные возможности Phaser для работы с графикой. Это основа для множества практических применений: от визуализации hitbox и зон видимости до создания динамического интерфейса и спецэффектов. Попробуйте поэкспериментировать: анимируйте движение треугольника, изменяя его координаты в методе update(), рисуйте несколько треугольников с разными стилями или используйте Phaser.Geom.Triangle для расчетов (например, проверки попадания точки в фигуру) без его отрисовки.