Класс Phaser.Math: утилиты и константы

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


Основные свойства и константы

Phaser.Math содержит ряд полезных констант, которые упрощают работу с углами, случайными величинами и ограничениями:

  • Phaser.Math.PI2 — полное окружение, равное (2 ). Используется для вычислений, связанных с кругами и вращениями.
  • Phaser.Math.DEG_TO_RAD — коэффициент для перевода градусов в радианы.
  • Phaser.Math.RAD_TO_DEG — коэффициент для перевода радианов в градусы.
  • Phaser.Math.MAX_SAFE_INTEGER и Phaser.Math.MIN_SAFE_INTEGER — безопасные границы целых чисел, идентичные стандартным значениям JavaScript.
  • Phaser.Math.FLOOR и Phaser.Math.CEIL — функции округления, предоставляющие альтернативу стандартным методам Math.floor и Math.ceil.

Эти константы часто используются в комбинации с методами для преобразования углов или ограничения значений.


Работа с числами и ограничениями

Phaser.Math содержит множество методов для работы с числами:

Ограничение значения

Phaser.Math.Clamp(value, min, max)

Возвращает число value, ограниченное диапазоном [min, max]. Если значение меньше min, возвращается min; если больше max, возвращается max.

Пример:

let speed = Phaser.Math.Clamp(playerSpeed, 0, 500);

Линейная интерполяция

Phaser.Math.Linear(a, b, t)

Вычисляет линейную интерполяцию между числами a и b с параметром t от 0 до 1:

let x = Phaser.Math.Linear(0, 100, 0.5); // x = 50

Метод Linear особенно полезен при плавных анимациях и движении объектов.

Проверка диапазона

Phaser.Math.Within(value, min, max)

Возвращает true, если value находится между min и max, включая границы. Используется для детекции попадания чисел в заданный диапазон.


Работа с углами и тригонометрией

Приведение угла к диапазону

Phaser.Math.Angle.Wrap(angle)

Приводит угол к диапазону от до π.

let normalized = Phaser.Math.Angle.Wrap(4 * Math.PI); // результат: 0
Phaser.Math.Angle.WrapDegrees(degrees)

Приводит угол в градусах к диапазону от -180 до 180.

Вычисление угла между точками

Phaser.Math.Angle.Between(x1, y1, x2, y2)

Возвращает угол в радианах между двумя точками на плоскости.

Пример:

let angle = Phaser.Math.Angle.Between(player.x, player.y, target.x, target.y);

Линейное сглаживание углов

Phaser.Math.Angle.RotateTo(current, target, step)

Пошагово поворачивает угол current к target с заданным шагом step. Полезно для плавного вращения спрайтов.


Работа со случайными числами

Phaser.Math предоставляет методы генерации случайных чисел и случайных выборок:

  • Phaser.Math.RND.integerInRange(min, max) — случайное целое число в диапазоне [min, max].
  • Phaser.Math.RND.frac() — случайное число с плавающей точкой от 0 до 1.
  • Phaser.Math.RND.pick(array) — случайный элемент из массива.
  • Phaser.Math.RND.weightedPick(array, weights) — выбор элемента с учётом весов.

Методы работают через внутренний генератор Phaser.Math.RND, что позволяет использовать один источник случайных чисел во всём проекте.


Вспомогательные функции для геометрии

  • Phaser.Math.Distance.Between(x1, y1, x2, y2) — вычисляет евклидово расстояние между двумя точками.
  • Phaser.Math.Distance.Squared(x1, y1, x2, y2) — квадрат расстояния, полезен для оптимизации вычислений.
  • Phaser.Math.Interpolation.Linear(array, t) — интерполяция через массив чисел.
  • Phaser.Math.FloorTo(value, place) и Phaser.Math.CeilTo(value, place) — округление числа до заданного разряда.

Работа с векторами и точками

Методы класса облегчают манипуляции с объектами Phaser.Math.Vector2 и координатами:

let vec = new Phaser.Math.Vector2(3, 4);
let normalized = vec.normalize(); // длина вектора = 1
let length = vec.length();        // длина вектора = 5

Методы Phaser.Math могут комбинироваться с векторами:

let angle = Phaser.Math.Angle.BetweenPoints(vec1, vec2);
let distance = Phaser.Math.Distance.BetweenPoints(vec1, vec2);

Итог использования

Phaser.Math объединяет в себе всё необходимое для:

  • работы с числами и ограничениями;
  • линейной и угловой интерполяции;
  • генерации случайных чисел;
  • геометрических вычислений и векторной математики;
  • удобного управления углами и вращениями объектов.

Статические методы и константы позволяют создавать компактный и эффективный код без необходимости импортировать отдельные библиотеки для базовой математики в играх. Это делает Phaser.Math незаменимым инструментом при разработке 2D-игровых проектов.