This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

FAQ Установка координат объекта относительно другого.

Mercury_One

Специалист
Автор темы
high coder
11 Фев 2021
37
22
82
Предупреждение: Код представлен на JS (client-side).

Порой, когда мы работаем с объектами появляется задача поставить ещё один относительно другого. Например: Нам надо поставить какой-то объект на столе или переместить его.
Вы можете подумать, что можно просто взять координаты основного объекта и чуть-чуть изменить их, но во-первых это не очень удобно, а во-вторых, что вы будете делать если надо повернуть объект.

Практический пример: У нас есть объект - стол блэкджека, на него надо положить карту относительно стола.

Реализация:
JavaScript:
let tablePos = {x: -412, y: 1168, z: 324.85};
let table = mp.objects.new(mp.game.joaat("vw_prop_casino_blckjack_01"), tablePos); //Создание стола
let card = mp.objects.new(mp.game.joaat("vw_prop_cas_card_hrt_ace"), tablePos); // Создание карты, пусть она будет на позиции стола (это не надолго)
let offsetCard = {x: 0.5737, y: 0.2376, z: 0.948025}; // Подобранные координаты смещения относительно стола
let newCardPos = mp.game.object.getObjectOffsetFromCoords(tablePos.x, tablePos.y, tablePos.z, table.getHeading(), offsetCard.x, offsetCard.y, offsetCard.z);
// mp.game.object.getObjectOffsetFromCoords - Возвращает координаты относительно объекта, учитывая его поворот(Heading)
// Первыми 3-мя аргументами предаём координаты основного объекта, затем градусы поворота и наконец координаты смещения
card.setCoordsNoOffset(newCardPos.x, newCardPos.y, newCardPos.z, false, false, true);
//object.setCoordsNoOffset - Устанавливает уже новые координаты, последние 3 аргумента это инвертирвание осей, можете поиграться с этим

По итогу: Меняя значения позиции стола, карта всё равно будет лежать на нём, даже если вы измените heading(угол разворота). Хочу заметить, что если вы будете вертеть объект уже после установки координат относительного объекта, то лучше его аттачить или ещё раз выполнить последние 2 функции из примера.

Если будут вопросы, задавайте в комментарии.
 
Последнее редактирование: