Векторы: Vector2, Vector3, Vector4

Phaser предоставляет встроенные классы для работы с векторами различных размерностей: Vector2, Vector3 и Vector4. Они используются для позиционирования объектов, управления движением, расчетов физики и трансформаций. Эти классы содержат набор методов для математических операций, нормализации, скалярного и векторного произведений, а также удобные функции для интерполяции.


Vector2

Класс 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.


Vector3

Класс 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);

Vector4

Класс 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.


Общие приемы и оптимизация

  1. Клонирование векторов: многие методы изменяют сам объект, поэтому при необходимости сохранить исходное значение следует использовать clone().
  2. Методы цепочек: большинство операций возвращают объект, что позволяет создавать цепочки операций:
v.clone().normalize().scale(50).add(offset);
  1. Преобразование между размерностями: можно легко переводить Vector2 в Vector3 или Vector4, добавляя недостающие компоненты:
let v2 = new Phaser.Math.Vector2(10, 20);
let v3 = new Phaser.Math.Vector3(v2.x, v2.y, 0);
  1. Использование в игровых объектах: векторы применяются для движения, столкновений, направления взгляда камеры, генерации частиц, трассировки лучей и физики.

Практическая заметка

Vector-классы Phaser встроены в Phaser.Math, поэтому не требуется подключать внешние библиотеки. Они оптимизированы для быстрого выполнения, что критично для частых обновлений в игровых циклах. Работа с векторами упрощает математическую часть разработки и повышает читаемость кода.

Vector2 — основной инструмент для 2D-логики, Vector3 — для псевдо-3D и физических расчетов, Vector4 — для более сложных графических эффектов и работы с кватернионами или RGBA цветами. Их сочетание позволяет строить гибкие и мощные игровые механики.