О чем этот пример
Отображение простых фигур — фундаментальный навык в разработке игр, будь то отладка зоны поражения, создание интерфейса или визуализация спецэффектов. В Phaser для этого есть мощный и легковесный объект `Graphics`. Эта статья научит вас создавать и настраивать контурные круги, что станет вашим первым шагом к программной отрисовке любой геометрии прямо в игре.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
graphics;
create ()
{
this.graphics = this.add.graphics();
const color = 0xffff00;
const thickness = 4;
const alpha = 1;
this.graphics.lineStyle(thickness, color, alpha);
const a = new Phaser.Math.Vector2(400, 300);
const radius = 128;
this.graphics.strokeCircle(a.x, a.y, radius);
}
}
const config = {
width: 800,
height: 600,
type: Phaser.CANVAS,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Создание холста для рисования: объект Graphics
Перед тем как рисовать, нужно подготовить холст. В Phaser за это отвечает класс Graphics. Он предоставляет низкоуровневый API для рисования линий и фигур.
Создаётся объект через фабридный метод сцены this.add.graphics(). Полученный экземпляр мы сохраняем в свойство класса для последующего использования.
this.graphics = this.add.graphics();
Настройка стиля линии
Чтобы нарисованная фигура была видима, необходимо задать стиль линии: её толщину, цвет и прозрачность. Для этого используется метод lineStyle().
- **Толщина (thickness)**: задаётся в пикселях. - **Цвет (color)**: указывается в шестнадцатеричном формате (hex). - **Альфа (alpha)**: значение от 0 (полная прозрачность) до 1 (полная непрозрачность).
const color = 0xffff00;
const thickness = 4;
const alpha = 1;
this.graphics.lineStyle(thickness, color, alpha);
Определение позиции и рисование круга
Теперь, когда стиль задан, можно приступить к рисованию. Сначала определяем центр будущего круга. Удобно использовать Phaser.Math.Vector2 для представления точки, но можно обойтись и простыми числами.
Ключевой метод — strokeCircle(). Он рисует только контур (обводку) круга, не заполняя его. Метод принимает три аргумента: координаты X и Y центра и радиус.
const a = new Phaser.Math.Vector2(400, 300);
const radius = 128;
this.graphics.strokeCircle(a.x, a.y, radius);
Если бы мы хотели залить круг цветом, нам понадобился бы метод fillCircle(), которому предшествовал бы вызов fillStyle().
Полный код сцены и конфигурация игры
Весь процесс рисования происходит внутри метода create() сцены, который вызывается один раз при её инициализации. Ниже приведён полный код примера, включая базовую конфигурацию игры.
Обратите внимание, что в конфиге указан type: Phaser.CANVAS. Объект Graphics также отлично работает и в режиме Phaser.WEBGL.
class Example extends Phaser.Scene {
graphics;
create () {
this.graphics = this.add.graphics();
const color = 0xffff00;
const thickness = 4;
const alpha = 1;
this.graphics.lineStyle(thickness, color, alpha);
const a = new Phaser.Math.Vector2(400, 300);
const radius = 128;
this.graphics.strokeCircle(a.x, a.y, radius);
}
}
const config = {
width: 800,
height: 600,
type: Phaser.CANVAS,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что попробовать дальше
Вы освоили базовый принцип рисования геометрических фигур в Phaser с помощью объекта Graphics. Для экспериментов попробуйте: нарисовать несколько кругов разного цвета в одном Graphics объекте, анимировать радиус или положение круга в методе update(), или использовать метод fillCircle() для создания залитых кругов. Это открывает путь к созданию динамических индикаторов, областей-триггеров и простых частиц прямо в коде, без использования текстур.
