Phaser предоставляет встроенные классы для работы с векторами различных размерностей: Vector2, Vector3 и Vector4. Они используются для позиционирования объектов, управления движением, расчетов физики и трансформаций. Эти классы содержат набор методов для математических операций, нормализации, скалярного и векторного произведений, а также удобные функции для интерполяции.
Класс Phaser.Math.Vector2 представляет двумерный
вектор с координатами x и y. Основные
применения включают позицию, скорость, ускорение и направление объектов
в 2D пространстве.
Создание вектора:
let v = new Phaser.Math.Vector2(100, 50);
Основные методы:
v.add(vector) — прибавляет другой вектор к
текущему.v.subtract(vector) — вычитает другой вектор.v.scale(factor) — масштабирует вектор на заданный
коэффициент.v.length() — возвращает длину вектора.v.normalize() — нормализует вектор (делает длину равной
1).v.dot(vector) — скалярное произведение двух
векторов.v.angle() — угол вектора относительно оси X.Пример использования для движения объекта:
let position = new Phaser.Math.Vector2(100, 100);
let velocity = new Phaser.Math.Vector2(1, 0.5);
position.add(velocity);
Интерполяция:
let start = new Phaser.Math.Vector2(0, 0);
let end = new Phaser.Math.Vector2(100, 100);
let t = 0.5;
let midpoint = start.clone().lerp(end, t);
Метод lerp позволяет получить точку между двумя
векторами по параметру t от 0 до 1.
Класс Phaser.Math.Vector3 расширяет функционал на
трехмерное пространство с координатами x, y,
z. Он особенно полезен для 3D-вычислений, работы с
эффектами, анимациями или трехмерной физикой в 2D-играх с псевдо-3D
эффектами.
Создание вектора:
let v3 = new Phaser.Math.Vector3(1, 2, 3);
Основные методы:
v3.add(vector) / v3.subtract(vector) —
арифметические операции.v3.cross(vector) — векторное произведение, возвращает
новый вектор, перпендикулярный плоскости двух.v3.dot(vector) — скалярное произведение.v3.length() и v3.normalize() — вычисление
длины и нормализация.v3.distance(vector) — расстояние до другого
вектора.Пример вращения объекта вокруг оси:
let axis = new Phaser.Math.Vector3(0, 1, 0);
let angle = Math.PI / 4;
let rotated = v3.clone().applyAxisAngle(axis, angle);
Метод applyAxisAngle вращает вектор на заданный угол
вокруг оси.
Линейная интерполяция в 3D:
let start = new Phaser.Math.Vector3(0, 0, 0);
let end = new Phaser.Math.Vector3(10, 10, 10);
let t = 0.3;
let interpolated = start.clone().lerp(end, t);
Класс Phaser.Math.Vector4 используется реже, но
необходим для работы с цветами, кватернионами или сложными матрицами.
Вектор имеет четыре компоненты: x, y,
z, w.
Создание:
let v4 = new Phaser.Math.Vector4(1, 2, 3, 1);
Основные методы:
v4.add(vector) / v4.subtract(vector) —
базовые операции.v4.scale(factor) — масштабирование.v4.dot(vector) — скалярное произведение.v4.length() и v4.normalize() — длина и
нормализация.v4.lerp(vector, t) — линейная интерполяция между двумя
векторами.Пример работы с цветом:
let colorStart = new Phaser.Math.Vector4(1, 0, 0, 1); // Красный RGBA
let colorEnd = new Phaser.Math.Vector4(0, 0, 1, 1); // Синий RGBA
let t = 0.5;
let blendedColor = colorStart.clone().lerp(colorEnd, t);
Метод lerp позволяет плавно смешивать цвета в формате
RGBA.
clone().v.clone().normalize().scale(50).add(offset);
let v2 = new Phaser.Math.Vector2(10, 20);
let v3 = new Phaser.Math.Vector3(v2.x, v2.y, 0);
Vector-классы Phaser встроены в Phaser.Math, поэтому не
требуется подключать внешние библиотеки. Они оптимизированы для быстрого
выполнения, что критично для частых обновлений в игровых циклах. Работа
с векторами упрощает математическую часть разработки и повышает
читаемость кода.
Vector2 — основной инструмент для 2D-логики, Vector3 — для псевдо-3D и физических расчетов, Vector4 — для более сложных графических эффектов и работы с кватернионами или RGBA цветами. Их сочетание позволяет строить гибкие и мощные игровые механики.