Алексей Мещеряков
Специалист
Доброго времени суток уважаемые пользователи портала Pawno-Info.
За последнее количество времени стало много возникать вопросов с полетами камер, люди мы уже современные, и все хотим чтобы было все у нас шикарно. Так вот пошла мода делать все летающее и движущее, но многие понятия не имеют как же осуществить хотя бы перелет камерой из одного места в другой.
Сегодня я постараюсь вам это рассказать. Похожего материала не встречал, если было, уж простите.
Итак, для осуществления полета, нам потребуется две функции, которые собственно и вызывают полет.
За последнее количество времени стало много возникать вопросов с полетами камер, люди мы уже современные, и все хотим чтобы было все у нас шикарно. Так вот пошла мода делать все летающее и движущее, но многие понятия не имеют как же осуществить хотя бы перелет камерой из одного места в другой.
Сегодня я постараюсь вам это рассказать. Похожего материала не встречал, если было, уж простите.
Итак, для осуществления полета, нам потребуется две функции, которые собственно и вызывают полет.
Функция 1 - InterpolateCameraPos
Этой функцией задаются координаты камеры, по которой они будут следовать.
playerid - ID игрока которому будет показана камера.
Float: FromX - Начальное положение камеры по координате Х.
Float: FromY - Начальное положение камеры по координате Y.
Float: FromZ - Начальное положение камеры по координате Z.
Float: ToX - Конечная координата Х.
Float: ToY - Конечная координата Y.
Float: ToZ - Конечная координата Z.
Time - время указывается в миллисекундах.
cut - На мой взгляд бесполезный аргумент. Задает плавность камеры. По умолчанию CAMERA_CUT. CAMERA_MOVE для плавного движения.
Float: FromX - Начальное положение камеры по координате Х.
Float: FromY - Начальное положение камеры по координате Y.
Float: FromZ - Начальное положение камеры по координате Z.
Float: ToX - Конечная координата Х.
Float: ToY - Конечная координата Y.
Float: ToZ - Конечная координата Z.
Time - время указывается в миллисекундах.
cut - На мой взгляд бесполезный аргумент. Задает плавность камеры. По умолчанию CAMERA_CUT. CAMERA_MOVE для плавного движения.
Пример функции:
PHP:
InterpolateCameraPos(playerid, 298.2383,-39.2116,1002.55, 293.3211,-39.2116,1002.55, 1000, CAMERA_MOVE);
2 Функция - InterpolateCameraLookAt
Это функция для интерполяции, другими словами, установка скорости камеры и заданного виду, например вид сверху.
playerid - ID игрока которому будет показана камера.
Float: FromX - Начальное положение камеры по координате Х.
Float: FromY - Начальное положение камеры по координате Y.
Float: FromZ - Начальное положение камеры по координате Z.
Float: ToX - Конечная координата Х.
Float: ToY - Конечная координата Y.
Float: ToZ - Конечная координата Z.
Time - время указывается в миллисекундах.
Float: FromX - Начальное положение камеры по координате Х.
Float: FromY - Начальное положение камеры по координате Y.
Float: FromZ - Начальное положение камеры по координате Z.
Float: ToX - Конечная координата Х.
Float: ToY - Конечная координата Y.
Float: ToZ - Конечная координата Z.
Time - время указывается в миллисекундах.
Пример функции:
PHP:
InterpolateCameraLookAt(playerid, 298.265594, -39.519813, 1000.55, 293.386596, -39.519813, 1000.55,1000);
P.S. Так же эти функции можно использовать отдельно друг от друга.
Для вашего удобства, сделал команду для сохранения позиции камер.
PHP:
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);
}
За каждое сохранение будет две координаты, это:
SetPlayerCameraPos
SetPlayerCameraLookAt
Функции полета будут действовать в любом паблике, можете вставить в команду, либо в заданную функцию, неважно. Полет будет осуществляться везде.
Спасибо за внимание. Надеюсь урок был для вас познавательным.
Последнее редактирование:
