PDA

Просмотр полной версии : [Вопрос] Полет Камерой



Skyline
09.01.2015, 23:46
Вообщем суть такая, как сделать полет камерой при нажатии на Текстдрйав, допустим, заходим в Пицерию, встаем на маркер и камера полетела к первому выбору, Нажимаешь на Тестдрайв камера полетела к следующему, или в аммо, выбор оружия, думаю понятно. Подскажите пожалуйста.

L0ndl3m
09.01.2015, 23:54
Команда для сохранения координат камеры ( координаты сохраняются в папке scriptfiles под названием CamCoords.ini ):


CMD:savecam(playerid, params[]) // if(strcmp(cmdtext, "/savecam", true, 8) == 0)
{
static const
fmt_str0[] = "SetPlayerCameraPos(playerid, %f, %f, %f);\n",
fmt_str1[] = "SetPlayerCameraLookAt(playerid, %f, %f, %f);\n";

const
fmt_size0 = sizeof(fmt_str0) + (-2 + 11) * 3,
fmt_size1 = sizeof(fmt_str1) + (-2 + 11) * 3;

#if fmt_size0 > fmt_size1
#define final_size fmt_size0
#else
#define final_size fmt_size1
#endif

new
str[final_size],
File: cam_file = fopen("CamCoords.ini", io_append),
Float: cam_pos_axis_x,
Float: cam_pos_axis_y,
Float: cam_pos_axis_z,
Float: cam_pos_vec_axis_x,
Float: cam_pos_vec_axis_y,
Float: cam_pos_vec_axis_z;

#undef final_size

GetPlayerCameraPos(playerid, cam_pos_axis_x, cam_pos_axis_y, cam_pos_axis_z);
GetPlayerCameraFrontVector(playerid, cam_pos_vec_axis_x, cam_pos_vec_axis_y, cam_pos_vec_axis_z);

format(str, sizeof(str), fmt_str0, cam_pos_axis_x, cam_pos_axis_y, cam_pos_axis_z);
fwrite(cam_file, str);

format(str, sizeof(str), fmt_str1, cam_pos_axis_x + 5.0 * cam_pos_vec_axis_x, cam_pos_axis_y + 5.0 * cam_pos_vec_axis_y, cam_pos_axis_z + 5.0 * cam_pos_vec_axis_z);
fwrite(cam_file, str);

return fclose(cam_file);
}


Как сделать из этих координат передвижение камеры?
Допустим мы сохранили 2 координаты в файл: Первая координата - откуда, вторая - куда, код:


SetPlayerCameraPos(playerid, 1647.343750, 1718.683959, 11.734600); // Откуда ( первая функция )
SetPlayerCameraLookAt(playerid, 1647.367431, 1723.648193, 11.138239); // Откуда // ( первая функция )
SetPlayerCameraPos(playerid, 1644.874145, 1863.826782, 11.175399); // Куда ( вторая функция )
SetPlayerCameraLookAt(playerid, 1641.950439, 1859.776733, 11.397855); // Куда // вторая функция )


Теперь используем функции InterpolateCameraPos и InterpolateCameraLookAt.

Берём координаты из первой функции SetPlayerCameraPos и совмещаем со второй функцией. И заключаем её в функцию InterpolateCameraPos. Должно получиться как-то так ( остальные параметры не относятся к положению камеры ):

InterpolateCameraPos(playerid, 1647.343750, 1718.683959, 11.734600, 1644.874145, 1863.826782, 11.175399, 10000);

Положение перемещения камеры готово, но при перемещении камеры, она будет смотреть не туда, куда мы хотели. Для это есть функция InterpolateCameraLookAt. Совмещать координаты мы будем так же как и с первой функцией.

Берём координаты из второй функции. Смещаем координаты из функции SetPlayerCameraPos с SetPlayerCameraLookAt.

В итоге должно получиться это:

InterpolateCameraLookAt(playerid, 1647.367431, 1723.648193, 11.138239, 1641.950439, 1859.776733, 11.397855, 10000);

Skyline
10.01.2015, 00:02
Расписываешь ты офигенно все. Спасибо буду пытаться делать)

Skyline
10.01.2015, 03:23
Такой вопрос, Почему при нажатии на ТекстДрайв, у меня первый и последний не нажимаются.


Textdraw0 = TextDrawCreate(315.666656, 311.111145, "9 mm");
TextDrawLetterSize(Textdraw0, 0.449999, 1.600000);
TextDrawTextSize(Textdraw0, 48.666664, 113.659286);
TextDrawAlignment(Textdraw0, 2);
TextDrawColor(Textdraw0, -1);
TextDrawUseBox(Textdraw0, true);
TextDrawBoxColor(Textdraw0, 595);
TextDrawSetShadow(Textdraw0, 0);
TextDrawSetOutline(Textdraw0, 0);
TextDrawBackgroundColor(Textdraw0, 51);
TextDrawFont(Textdraw0, 1);
TextDrawSetProportional(Textdraw0, 1);

Textdraw1 = TextDrawCreate(275.333282, 331.851501, "x50 $1250");
TextDrawLetterSize(Textdraw1, 0.307332, 1.064888);
TextDrawTextSize(Textdraw1, 305.666717, -38.162948);
TextDrawAlignment(Textdraw1, 2);
TextDrawColor(Textdraw1, -1);
TextDrawUseBox(Textdraw1, true);
TextDrawBoxColor(Textdraw1, 595);
TextDrawSetSelectable(Textdraw1, true);
TextDrawSetShadow(Textdraw1, 0);
TextDrawSetOutline(Textdraw1, 0);
TextDrawBackgroundColor(Textdraw1, 51);
TextDrawFont(Textdraw1, 0);
TextDrawSetProportional(Textdraw1, 1);

Textdraw2 = TextDrawCreate(298.999725, 331.851501, "x100 $2500");
TextDrawLetterSize(Textdraw2, 0.309332, 1.064888);
TextDrawTextSize(Textdraw2, 332.666595, 11.199995);
TextDrawAlignment(Textdraw2, 1);
TextDrawColor(Textdraw2, -1);
TextDrawUseBox(Textdraw2, true);
TextDrawBoxColor(Textdraw2, 595);
TextDrawSetShadow(Textdraw2, 0);
TextDrawSetOutline(Textdraw2, 0);
TextDrawBackgroundColor(Textdraw2, 255);
TextDrawFont(Textdraw2, 1);
TextDrawSetProportional(Textdraw2, 1);
TextDrawSetSelectable(Textdraw2, true);

Textdraw3 = TextDrawCreate(339.667022, 331.851501, "x200 $5000");
TextDrawLetterSize(Textdraw3, 0.309332, 1.064888);
TextDrawTextSize(Textdraw3, 372.666748, 21.570369);
TextDrawAlignment(Textdraw3, 1);
TextDrawColor(Textdraw3, -1);
TextDrawUseBox(Textdraw3, true);
TextDrawBoxColor(Textdraw3, 595);
TextDrawSetShadow(Textdraw3, 0);
TextDrawSetOutline(Textdraw3, 0);
TextDrawBackgroundColor(Textdraw3, 51);
TextDrawFont(Textdraw3, 1);
TextDrawSetProportional(Textdraw3, 1);
TextDrawSetSelectable(Textdraw3, true);

Textdraw4 = TextDrawCreate(258.999938, 356.740722, "< Back");
TextDrawLetterSize(Textdraw4, 0.245665, 1.006816);
TextDrawTextSize(Textdraw4, 292.000030, 13.688893);
TextDrawAlignment(Textdraw4, 1);
TextDrawColor(Textdraw4, -1);
TextDrawUseBox(Textdraw4, true);
TextDrawBoxColor(Textdraw4, 595);
TextDrawSetShadow(Textdraw4, 0);
TextDrawSetOutline(Textdraw4, 0);
TextDrawBackgroundColor(Textdraw4, 51);
TextDrawFont(Textdraw4, 1);
TextDrawSetProportional(Textdraw4, 1);
TextDrawSetSelectable(Textdraw4, true);

Textdraw5 = TextDrawCreate(298.999908, 356.740722, "exit");
TextDrawLetterSize(Textdraw5, 0.245665, 1.006816);
TextDrawTextSize(Textdraw5, 333.000030, 12.029629);
TextDrawAlignment(Textdraw5, 1);
TextDrawColor(Textdraw5, -1);
TextDrawUseBox(Textdraw5, true);
TextDrawBoxColor(Textdraw5, 595);
TextDrawSetShadow(Textdraw5, 0);
TextDrawSetOutline(Textdraw5, 0);
TextDrawBackgroundColor(Textdraw5, 51);
TextDrawFont(Textdraw5, 1);
TextDrawSetProportional(Textdraw5, 1);
TextDrawSetSelectable(Textdraw5, true);

Textdraw6 = TextDrawCreate(339.666717, 356.740722, "next >");
TextDrawLetterSize(Textdraw6, 0.245665, 1.006816);
TextDrawTextSize(Textdraw6, 372.666564, -19.496294);
TextDrawAlignment(Textdraw6, 1);
TextDrawColor(Textdraw6, -1);
TextDrawUseBox(Textdraw6, true);
TextDrawBoxColor(Textdraw6, 595);
TextDrawSetShadow(Textdraw6, 0);
TextDrawSetOutline(Textdraw6, 0);
TextDrawBackgroundColor(Textdraw6, 51);
TextDrawFont(Textdraw6, 1);
TextDrawSetProportional(Textdraw6, 1);
TextDrawSetSelectable(Textdraw6, true);

1 и 6 не нажимаются, не понимаю почему.

И еще, как вернуться в прежнее положение игрока.
Кроме функции SetCameraBehindPlayer(playerid);
Нужна еще, а то приходится постоянно ESC нажимать чтобы выйти из меню камеры.

Skyline
11.01.2015, 15:24
Подниму

Spectrum
11.01.2015, 16:27
на первом текстдраве ты не включил селектабельность (TextDrawSetSelectable)

И еще, как вернуться в прежнее положение игрока.
Записывай текущие координаты игрока в переменную и в нужный момент спавни его на них

Skyline
11.01.2015, 21:07
Мне на первом и не нужен т.е. 0
Я написал на каких не работает

Skyline
13.01.2015, 00:49
Кто может помочь? Уже раз 15 пытался перерисовывать эти Текстдрайвы и всегда один, да работать не будет(

MΛRŠ
13.01.2015, 00:57
можно использовать FS Cameditor, он по легче высшего поста.

Skyline
13.01.2015, 01:13
Да полет камерой я могу сделать и при помощи функций, вопрос в другом, почему некоторые текстдрайвы не нажимаются, хотя функции присвоены, многие говорили что я не правильно рисую их, но извините, после 15 раз, когда я их перерисовывал по разному - реультат один и тот же, какая то кнопка, да не будет работать...

Skyline
14.01.2015, 21:48
Ладно, закрывайте тему, раз никто не знает.