Тригонометрия.
Необходимо выполнить расчеты, чтобы получить координаты положения прицела и направления прицела.
По поводу оплаты договоримся.
Координаты прицела:
#define MAX_SCALE_DIST 100.0 //Максимальная дистанция для проверки, на которую пустится луч
new
Float:pX, Float:pY, Float:pZ,
Float:vX, Float:vY, Float:vZ,
Float:atX, Float:atY, Float:atZ;
GetPlayerCameraPos(playerid, pX, pY, pZ); //Узнаём начальные координаты для луча
GetPlayerCameraFrontVector(playerid, vX, vY, vZ);
//Вычисляем конечные координаты для луча
atX = pX + (vX * MAX_SCALE_DIST);
atY = pY + (vY * MAX_SCALE_DIST);
atZ = pZ + (vZ * MAX_SCALE_DIST);
//Узнаём, нашёл ли луч какую-то коллизию с объектом на своём пути
if(CA_RayCastLine(pX, pY, pZ, vX, vY, vZ, atX, atY, atZ)) //Нашёл
{ //Координаты коллизии (т.е. та точка, в которую смотрит игрок) теперь лежат в atX, atY, atZ
//Твой код
}
else //Луч ни с чем не столкнулся, возможно игрок смотрит в небо или что-то подобное
{
//Твой код
}
Направление прицела: GetPlayerFacingAngle (http://wiki.pro-pawn.ru/wiki/GetPlayerCameraFrontVector) или GetPlayerCameraFrontVector (https://wiki.sa-mp.com/wiki/GetPlayerCameraFrontVector).
Пользуйся. Отдаю безвозмездно
Ты проверял в действии? Видимо нет, а я проверял
Это центральная точка на экране и направление у нее тоже идет по центру, у прицела же иначе
Чтобы получить координаты положения прицела и направления прицела, нужно сначала выставить начало луча используя координаты Origin во время выстрела, далее сместить координаты направления камеры таким образом, чтобы луч был пропорционален направлению прицела (проще говоря, направить луч в прицел), ну а после того, как направление луча найдено, нужно найти координаты начало луча используя GetPlayerPos + GetPlayerFacingAngle.
Концепцию и порядок действий описал, осталось реализовать. Найдутся такие? Денюжкой не обижу
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot