О чем этот пример
Геометрические вычисления — основа для игровой механики, интерфейсов и визуальных эффектов. В этой статье мы разберем, как работать с высотой линии в Phaser, используя метод `Phaser.Geom.Line.Height()`. Вы научитесь динамически измерять вертикальный размер отрезка и визуализировать этот параметр в реальном времени, что полезно для создания редакторов уровней, коллайдеров или интерактивных инфографик.
Версия Phaser: код и демо в этой статье рассчитаны на Phaser 3.90.0.
Живой запуск
Ниже встроен рабочий билд примера. Оригинальный источник: GitHub.
Исходный код
class Example extends Phaser.Scene
{
create ()
{
const graphics = this.add.graphics({ lineStyle: { width: 4, color: 0xaa00aa } });
const line = new Phaser.Geom.Line(0, 300, 400, 100);
const text = this.add.text(50, 50, '');
this.input.on('pointermove', pointer =>
{
line.x2 = pointer.x;
line.y2 = pointer.y;
redraw();
});
redraw();
function redraw ()
{
graphics.clear();
graphics.strokeLineShape(line);
const height = Phaser.Geom.Line.Height(line);
graphics.lineStyle(2, 0x00aa00);
graphics.lineBetween(2, 300, 2, 300 - height);
text.setText(`Line Height: ${height}`);
}
}
}
const config = {
width: 800,
height: 600,
type: Phaser.AUTO,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Что такое высота линии?
В контексте Phaser высота линии (Height) — это разница между максимальным и минимальным значением Y-координат её конечных точек. Это не длина отрезка, а именно его вертикальный «размах». Метод Phaser.Geom.Line.Height() мгновенно вычисляет это значение.
Это полезно, когда нужно определить, насколько линия «высока» относительно мировой системы координат. Например, для проверки пересечения с горизонтальными платформами или для выравнивания графических элементов.
Разбираем код примера
В примере создаётся сцена, где одна из точек линии привязана к курсору мыши, а её высота отображается численно и графически.
Инициализация объектов:
const graphics = this.add.graphics({ lineStyle: { width: 4, color: 0xaa00aa } });
const line = new Phaser.Geom.Line(0, 300, 400, 100);
const text = this.add.text(50, 50, '');
Здесь graphics — холст для рисования, line — отрезок с началом в (0,300) и концом (400,100), text — текстовый объект для вывода значения.
Обработка движения мыши:
this.input.on('pointermove', pointer => {
line.x2 = pointer.x;
line.y2 = pointer.y;
redraw();
});
При движении мыши координаты второй точки линии (x2, y2) обновляются, и вызывается функция перерисовки redraw().
Функция redraw() и вычисление высоты
Функция redraw() очищает холст, рисует линию, вычисляет её высоту и отображает результат.
Очистка и рисование основной линии:
graphics.clear();
graphics.strokeLineShape(line);
Вычисление высоты:
const height = Phaser.Geom.Line.Height(line);
Метод Height() принимает объект линии и возвращает число — её высоту.
Визуализация высоты:
graphics.lineStyle(2, 0x00aa00);
graphics.lineBetween(2, 300, 2, 300 - height);
text.setText(`Line Height: ${height}`);
Зелёная вертикальная линия рисуется от фиксированной точки (2,300) вверх на вычисленную высоту. Текст обновляется актуальным значением. Это наглядно демонстрирует, что высота — это проекция на ось Y.
Конфигурация игры и запуск
Код завершается стандартной конфигурацией Phaser Game, которая задаёт размеры окна, тип рендерера и указывает класс сцены.
const config = {
width: 800,
height: 600,
type: Phaser.AUTO,
parent: 'phaser-example',
scene: Example
};
const game = new Phaser.Game(config);
Этот блок создаёт экземпляр игры, инициализирует сцену Example и запускает весь описанный выше интерактивный пример.
Что попробовать дальше
Метод Phaser.Geom.Line.Height() предоставляет простой способ получить вертикальную проекцию отрезка. Понимание таких базовых геометрических операций открывает путь к созданию сложных интерактивных систем. Для экспериментов попробуйте привязать к курсору первую точку линии, вычислить и отрисовать также её ширину (Phaser.Geom.Line.Width()), или использовать высоту для управления скоростью падающего объекта вдоль этой линии.
