PDA

Просмотр полной версии : [Вопрос] Как создать пикап/маркер рядом с авто?



Sash.
27.07.2018, 16:31
Всем привет, подскажите как создается такой маркер? https://imgur.com/a/yGHrUVU
(Т.е конкретно рядом с авто, в желаемом месте загрузки)
Должен использоваться для загрузки/разгрузки рабочего авто.

DeimoS
27.07.2018, 17:03
Вот готовая функция

stock GetCoordBootVehicle(vehicleid, &Float:x, &Float:y, &Float:z)
{
new Float:angle,Float:distance;
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, x, distance, z);
distance = distance/2 + 0.1;
GetVehiclePos(vehicleid, x, y, z);
GetVehicleZAngle(vehicleid, angle);
x += (distance * floatsin(-angle+180, degrees));
y += (distance * floatcos(-angle+180, degrees));
return 1;
}

Как можно увидеть, через GetVehicleModelInfo узнаётся размер модели авто по оси y (от багажника до капота). Далее результат делится на 2, дабы получить расстояние от центра до багажника/капота. Ну а дальше идёт получение позиции авто на карте и вычисление координат перед багажником при помощи тригонометрии.

DrumYum
27.07.2018, 17:08
Поворот транспорта можно узнать через GetVehicleZAngle, а смещение (offset) относительно координат транспорта можно получить через GetVehicleModelInfo, либо вручную подобрать

UPD: извиняюсь, загрузил страницу до появления ответа выше

Sash.
27.07.2018, 19:34
Вот готовая функция

stock GetCoordBootVehicle(vehicleid, &Float:x, &Float:y, &Float:z)
{
new Float:angle,Float:distance;
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, x, distance, z);
distance = distance/2 + 0.1;
GetVehiclePos(vehicleid, x, y, z);
GetVehicleZAngle(vehicleid, angle);
x += (distance * floatsin(-angle+180, degrees));
y += (distance * floatcos(-angle+180, degrees));
return 1;
}

Как можно увидеть, через GetVehicleModelInfo узнаётся размер модели авто по оси y (от багажника до капота). Далее результат делится на 2, дабы получить расстояние от центра до багажника/капота. Ну а дальше идёт получение позиции авто на карте и вычисление координат перед багажником при помощи тригонометрии.

Спасибо, как всегда выручил! Все получилось!

Sash.
27.07.2018, 21:50
Вот готовая функция

stock GetCoordBootVehicle(vehicleid, &Float:x, &Float:y, &Float:z)
{
new Float:angle,Float:distance;
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, x, distance, z);
distance = distance/2 + 0.1;
GetVehiclePos(vehicleid, x, y, z);
GetVehicleZAngle(vehicleid, angle);
x += (distance * floatsin(-angle+180, degrees));
y += (distance * floatcos(-angle+180, degrees));
return 1;
}

Как можно увидеть, через GetVehicleModelInfo узнаётся размер модели авто по оси y (от багажника до капота). Далее результат делится на 2, дабы получить расстояние от центра до багажника/капота. Ну а дальше идёт получение позиции авто на карте и вычисление координат перед багажником при помощи тригонометрии.

А возможно ли реализовать следующее:
Появился маркер с одной стороны авто,игрок встал на него-произошло действие и маркер удалился. После него появился следующий, но с небольшим смещением по какой-либо оси, опять игрок встает и выполняется действие, после чего маркер удаляется и появляется следующий.
Как можно такое реализовать?

DeimoS
28.07.2018, 00:22
А возможно ли реализовать следующее:
Появился маркер с одной стороны авто,игрок встал на него-произошло действие и маркер удалился. После него появился следующий, но с небольшим смещением по какой-либо оси, опять игрок встает и выполняется действие, после чего маркер удаляется и появляется следующий.
Как можно такое реализовать?

Эмм, точно так же, рассчитывая координаты вокруг авто?