Перейти к основному содержанию

u (утилиты)


u (утилиты)

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

Автоматически переведённая страница

К сожалению, на полный ручной перевод у нас не хватает ресурсов.
Если вы увидели ошибку — отправьте пул-риквест с исправлениями (ссылка для редактирования в конце страницы).

Геометрия

u.ldx(длина, направление) и u.lengthDirX(длина, направление)

Получает горизонтальную часть вектора.

Пример: Создание пуль, относящейся к спрайту героя

JavaScript
var dx = u.ldx(40, this.angle),
    dy = u.ldy(40, this.angle);
var bullet = templates.copy('Bullet', this + dx, this + dy);
bullet.direction = this.angle;

В приведенном примере создается новая пуля (bullet), которая спроецирована относительно положения героя на заданный угол (angle). Функции ldx и ldy используются для расчета смещения по осям X и Y соответственно, в зависимости от заданного угла. Затем создается копия шаблона "Bullet" с помощью функции templates.copy, передаются координаты пули с учетом смещения. Направление пули устанавливается равным углу героя (angle), чтобы она летела в направлении, куда смотрит герой.

u.ldy(длина, направление) и u.lengthDirY(длина, направление)

Получает вертикальную часть вектора.

u.distance(from, to)

Возвращает расстояние меж двумя объектами. У объектов обязательно должны быть свойства x и y (они есть у всех копий).

Пример: Получить расстояние от текущей копии до игрового персонажа

JavaScript
var player = templates.list['Hero'][0];
if (templates.valid(player)) {
    console.log(u.distance(this, player));
}

u.direction(from, to)

Возвращает угол вектора, идущего от одного объекта до другого, в градусах. У объектов обязательно должны быть свойства x и y (они есть у всех копий).

Пример: Выстрелить снаряд в направлении игрового персонажа

JavaScript
var player = templates.list['Hero'][0];
if (templates.valid(player)) {
    var projectile = templates.copy('Laser', this.x, this.y);
    projectile.direction = u.direction(this, player);
}

u.pdn(x1, y1, x2, y2) и u.pointDirection(x1, y1, x2, y2)

Определяет направление вектора в градусах, указывающего с точки (x1, y1) на точку (x2, y2).

u.pdc(x1, y1, x2, y2) и u.pointDistance(x1, y1, x2, y2)

Получает расстояние между точками (x1; y1) и (x2; y2).

г.rotate(x, y, deg)

Поворачивает заданный вектор на заданный угол. Возвращает объект PIXI.Point с двумя свойствами: x и y компоненты.

u.rotateRad(x, y, рад)

Тот же самый "u.rotate", но угол даётся в радианах. Возвращает объект (PIXI.Point) с двумя свойствами: "x" и "y".

u.degToRad(deg)

Преобразует градусы в радианы.

u.radToDeg(рад)

Преобразует радианы в градусы.

u.deltaDir(dir1, dir2)

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

Координаты игрового процесса и интерфейса пользователя

u.uiToGameCoord(x, y)

Преобразует координаты из пользовательского интерфейса в игровые координаты. Возвращает объект (PIXI.Point), имеющий два свойства: x и y.

u.gameToUiCoord(x, y)

Преобразует координаты игры в координаты интерфейса. Возвращает объект (PIXI.Point) с двумя свойствами: компонентами x и y.

Математика

u.clamp(min, val, max)

Возвращает значение val, прирезанное к значению min и max.

u.lerp(a, b, alpha)

Линейно интерполирует значение от a до b, возвращая a, если alpha = 0, и b, если alpha = 1.

u.unlerp(a, b, val)

Обратная функция к u.lerp. Возвращает позицию val в диапазоне от a до b. Если val находится внутри этого диапазона, метод вернет значение между 0 и 1.

u.map(val, inMin, inMax, outMin, outMax)

Преобразует заданное val из одного диапазона чисел (inMin - inMax) в другой (outMin - outMax).

Встроенные проверки столкновения

u.prect(x1, y1, arg: number[] | Copy) и u.pointRectangle(x1, y1, arg: number[] | Copy)

Проверяет, находится ли заданная точка (x1;y1) внутри прямоугольника. arg может быть либо массивом координат ([x1, y1, x2, y2]), либо Копией с прямоугольной формой.

u.pcircle(x1, y1, arg: number[] | Copy) и u.pointCircle(x1, y1, arg: number[] | Copy)

Проверяет, находится ли заданная точка внутри круга. arg может быть либо массивом [x1, y1, радиус], либо Копией с круглой формой.

Значения времени

u.time

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

Если вы планируете изменить целевую кадровую скорость вашей игры, вам следует использовать u.time вместо u.delta.

Минимальный пример:

this.x += this.windSpeed * u.time;

Обратите внимание, что this.move() уже использует это значение, поэтому нет необходимости умножать this.speed на него заранее.

u.timeUi

Аналогично свойству u.time, это свойство также измеряет время между предыдущим и текущим кадрами, в секундах, но это значение игнорирует эффекты медленного воспроизведения и паузы игры. (См. здесь [поиск по советам и хитрощам /game-pause.md] для получения дополнительной информации о приостановке игры и изменении скорости игры.)

u.delta

Измерение, показывающее, сколько времени ушло на отрисовку предыдущей кадра, обычно равное 1 и большее по величине при задержках. Например, если оно равно 2, это означает, что предыдущий кадр рисовался вдвое дольше, чем ожидалось на основе FPS-сокращения.

Это свойство устарело.

Используйте u.time вместо него.

u.deltaUi

Аналогично свойству u.delta, это свойство также измеряет время между предыдущим и текущим кадрами, но этот показатель игнорирует эффекты медленного воспроизведения и паузы в игре. (См. здесь, чтобы узнать о паузе в игре и изменении скорости игры.)

Это устаревшее свойство.

Используйте u.timeUi вместо него.

Разное:

u.hexToPixi(hex: string)

Преобразует строку в шестнадцатеричном формате в цвет Pixi.

Пример: установить цвет оттенка копии из CSS-цвета

JavaScript
this.tint = u.hexToPixi('#0dfac3');

u.pixiToHex(pixi)

Преобразует цвет Pixi в шестнадцатеричный код цвета.

Пример: установить цвет фона страницы из цвета Pixi

JavaScript
document.body.style.backgroundColor = u.pixiToHex(0x0dfac3);

u.wait(time)

Возвращает Promise, который ждет time миллисекунд, а затем разрешается без каких-либо данных. Отклоняется, если в процессе ожидания загружается новая комната. Пример:

JavaScript
var enemy = whatever;
enemy.state = 'Disappear';
u.wait(1000)
.then(() => {
    if (!enemy.kill) { // Выполнется через секунду
        enemy.kill = true;
    }
});

u.load(url: Строка, обратный вызов: Функция)

Загружает указанный скрипт и вызывает обратный вызов после его загрузки.