О чем этот пример
Понимание геометрических примитивов Phaser упрощает создание игровой логики, связанной с областями, коллайдерами и визуализацией. Класс `Phaser.Geom.Ellipse` предоставляет набор готовых свойств для быстрого доступа к ключевым точкам фигуры. Эта статья покажет, как использовать эти свойства для отрисовки эллипса и его описанного прямоугольника, что полезно для отладки хитбоксов или создания зон интереса.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const ellipse = new Phaser.Geom.Ellipse(400, 300, 250, 150);
const graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00aaaa } });
graphics.strokeEllipseShape(ellipse);
graphics.lineStyle(2, 0x00aa00);
graphics.lineBetween(ellipse.x, ellipse.y, ellipse.right, ellipse.bottom);
graphics.strokeRect(ellipse.left, ellipse.top, ellipse.width, ellipse.height);
}
}
const config = {
width: 800,
height: 600,
type: Phaser.AUTO,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Создание эллипса и его визуализация
В Phaser геометрические объекты, такие как эллипс, часто используются для вычислений, а их отрисовка выполняется через Graphics.
Сначала создадим экземпляр Phaser.Geom.Ellipse. Его конструктор принимает координаты центра (x, y), ширину и высоту.
const ellipse = new Phaser.Geom.Ellipse(400, 300, 250, 150);
Затем создаем объект graphics и используем метод strokeEllipseShape, чтобы нарисовать контур нашего эллипса.
const graphics = this.add.graphics({ lineStyle: { width: 2, color: 0x00aaaa } });
graphics.strokeEllipseShape(ellipse);
Использование базовых свойств: x, y, right, bottom
Каждый эллипс имеет свойства, дающие мгновенный доступ к его геометрии. Свойства `xиyхранят координаты центра. Свойстваrightиbottom` вычисляют крайнюю правую и нижнюю точки описанного прямоугольника.
В примере мы рисуем зеленую линию из центра эллипса в его правый нижний угол, используя эти свойства.
graphics.lineStyle(2, 0x00aa00);
graphics.lineBetween(ellipse.x, ellipse.y, ellipse.right, ellipse.bottom);
Это наглядно показывает связь центра фигуры с ее границами.
Описанный прямоугольник и его свойства
Любой эллипс можно вписать в выровненный по осям прямоугольник. Phaser.Geom.Ellipse предоставляет свойства для работы с этим прямоугольником: left, top, width, height.
Свойства left и top — это координаты левого верхнего угла этого воображаемого прямоугольника. Зная их и размеры, мы можем его нарисовать.
graphics.strokeRect(ellipse.left, ellipse.top, ellipse.width, ellipse.height);
Результат — прямоугольник, плотно описывающий эллипс. Эта техника часто используется для визуализации границ коллайдеров или зон спавна.
Полный список полезных свойств Ellipse
Для комплексной работы доступны и другие вычисляемые свойства объекта. Вот основные из них:
- `x,y`: Центр эллипса.
- left, right: Левая и правая границы описанного прямоугольника.
- top, bottom: Верхняя и нижняя границы.
- width, height: Ширина и высота эллипса (и его описанного прямоугольника).
Все эти свойства доступны только для чтения и автоматически пересчитываются при изменении параметров эллипса через сеттеры или методы вроде setTo.
Что попробовать дальше
Свойства геометрических объектов в Phaser — это мощный инструмент для упрощения кода. Вместо ручных вычислений координат вы получаете их мгновенно. Поэкспериментируйте: попробуйте анимировать изменение width и height эллипса и наблюдайте, как автоматически меняются right и bottom. Используйте этот подход для отладки физических тел или создания динамических областей эффектов.
