u (утилиты)
u (утилиты)
Этот объект содержит множество полезных утилит для облегчения процесса разработки.
Автоматически переведённая страница
К сожалению, на полный ручной перевод у нас не хватает ресурсов.
Если вы увидели ошибку — отправьте пул-риквест с исправлениями (ссылка для редактирования в конце страницы).
Геометрия
u.ldx(длина, направление)
и u.lengthDirX(длина, направление)
Получает горизонтальную часть вектора.
Пример: Создание пуль, относящейся к спрайту героя
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;
dx = u.ldx 40, angle
dy = u.ldy 40, angle
bullet = templates.copy 'Bullet', this + dx, this + dy
bullet.direction = angle
В приведенном примере создается новая пуля (bullet), которая спроецирована относительно положения героя на заданный угол (angle). Функции ldx и ldy используются для расчета смещения по осям X и Y соответственно, в зависимости от заданного угла. Затем создается копия шаблона "Bullet" с помощью функции templates.copy, передаются координаты пули с учетом смещения. Направление пули устанавливается равным углу героя (angle), чтобы она летела в направлении, куда смотрит герой.
u.ldy(длина, направление)
и u.lengthDirY(длина, направление)
Получает вертикальную часть вектора.
u.distance(from, to)
Возвращает расстояние меж двумя объектами. У объектов обязательно должны быть свойства x
и y
(они есть у всех копий).
Пример: Получить расстояние от текущей копии до игрового персонажа
var player = templates.list['Hero'][0];
if (templates.valid(player)) {
console.log(u.distance(this, player));
}
player = templates.list['Hero'][0]
if templates.valid player
console.log u.distance(this, player)
u.direction(from, to)
Возвращает угол вектора, идущего от одного объекта до другого, в градусах. У объектов обязательно должны быть свойства x
и y
(они есть у всех копий).
Пример: Выстрелить снаряд в направлении игрового персонажа
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);
}
player = templates.list['Hero'][0]
if templates.valid player
projectile = templates.copy 'Laser', @x, @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-цвета
this.tint = u.hexToPixi('#0dfac3');
@tint = u.hexToPixi '#0dfac3'
u.pixiToHex(pixi)
Преобразует цвет Pixi в шестнадцатеричный код цвета.
Пример: установить цвет фона страницы из цвета Pixi
document.body.style.backgroundColor = u.pixiToHex(0x0dfac3);
document.body.style.backgroundColor = u.pixiToHex(0x0dfac3);
u.wait(time)
Возвращает Promise, который ждет time
миллисекунд, а затем разрешается без каких-либо данных. Отклоняется, если в процессе ожидания загружается новая комната. Пример:
var enemy = whatever;
enemy.state = 'Disappear';
u.wait(1000)
.then(() => {
if (!enemy.kill) { // Выполнется через секунду
enemy.kill = true;
}
});
enemy = whatever
enemy.state = 'Disappear'
u.wait 1000
.then =>
if not enemy.kill
# Выполнется через секунду
enemy.kill = yes
u.load(url: Строка, обратный вызов: Функция)
Загружает указанный скрипт и вызывает обратный вызов после его загрузки.