PDA

Просмотр полной версии : [Function] SetPlayerFacingPos - повернуть игрока к указанным координатам



Daniel_Cortez
01.05.2015, 20:46
Описание:

Поворачивает игрока лицом к указанным координатам.

Параметры:

playerid - ID поворачиваемого игрока
Float:x, Float:y - координаты, к которым будет повёрнут игрок

Возвращаемое значение:

Функция возвращает 1, если игрок подключен, иначе - 0.

Код:

stock SetPlayerFacingPos(playerid, Float:x, Float:y)
{// by Daniel_Cortez \\ pro-pawn.ru
static Float:ax, Float:ay, Float:az;
if(GetPlayerPos(playerid, ax, ay, az) == 0)
return 0;
return SetPlayerFacingAngle(playerid, atan2(y-ay, x-ax)-90.00);
}


Пример использования:

CMD:setfacingpos(playerid, params[])
{
extract params -> new Float:x, Float:y; else
return SendClientMessage(playerid, -1, "Использование: /setfacingpos [x] [y]");
return SetPlayerFacingPos(playerid, x, y);
}


Автор: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)


Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено.

Nazarik
01.05.2015, 20:56
Параметры:

playerid - ID поворачиваемого игрока
Float:x, Float:y, Float:z - координаты, к которым будет повёрнут игрок


Ошибочка в описании.

Daniel_Cortez
01.05.2015, 21:00
Ошибочка в описании.
Исправлено, thx.

L0ndl3m
01.05.2015, 23:46
Если это возможно, то хотелось бы узнать на счёт функции "atan2", а именно: что она из себя представляет? Почему именно она использована в этом коде? Когда её полезно использовать?

P.S.: На данный вопрос можно не отвечать, хочу узнать принцип действия, ибо я ни разу не использовал данную функцию, а подробной информации о данной функции я, к сожалению так и не нашёл.

И почему была инициализирована переменная "a", ведь можно было обойтись без неё?

Daniel_Cortez
02.05.2015, 00:01
Это арктангенс от двух параметров, представляющих собой координаты точки.
Принцип работы можно рассмотреть на следующем рисунке:

https://upload.wikimedia.org/wikipedia/ru/8/8f/Trig_functions.gif
Функция atan2 возвращает угол точки (A;B) относительно центра координат (0;0). Угол измеряется в градусах.
Таким образом можно получить угол между двумя точками.
И да, в SetPlayerFacingPos я отнял от полученного угла ещё 90 градусов. Это связано с тем, что в GTA:SA ось X почему-то вывернута разработчиками в противоположную сторону и углы поворота имеют совсем другие значения со смещением в -90.

P.S.: Немного обновил функцию.

Seregamil
03.05.2015, 11:24
extract params -> new Float:x, Float:y; else
Я чего-то не знаю?

Daniel_Cortez
03.05.2015, 13:43
Я чего-то не знаю?
http://forum.sa-mp.com/showthread.php?t=570927 (см. раздел "extract")

Странно, что этим до сих пор никто не пользуется, в то время, как скоро уже будет готов sscanf3.

Edwin
08.06.2015, 18:36
Вот спасибки, как раз ломал голову над изобретением чего-то подобного
Про позицию Z, кстати, почему-то не подумал. Благодарствую, сэр