Перейти к содержанию
Авторизация  
#Kot

Полеты камерой.

Рекомендуемые сообщения

#Kot
За последнее количество времени стало много возникать вопросов с полетами камер, люди мы уже современные, и все хотим чтобы было все у нас шикарно. Так вот пошла мода делать все летающее и движущее, но многие понятия не имеют как же осуществить хотя бы перелет камерой из одного места в другой.
 
Сегодня я постараюсь вам это рассказать. Похожего материала не встречал, если было, уж простите.
 
Итак, для осуществления полета, нам потребуется две функции, которые собственно и вызывают полет.
 
 
Функция 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 для плавного движения

 
Пример функции:
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 - время указывается в миллисекундах

 
Пример функции:
InterpolateCameraLookAt(playerid, 298.265594, -39.519813, 1000.55, 293.386596, -39.519813, 1000.55,1000);

 

 

P.S. Так же эти функции можно использовать отдельно друг от друга.
 
Для вашего удобства, сделал команду для сохранения позиции камер. 
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);
    }  
Координаты будут в папке scriptfiles в документе под названием CamCoords.
За каждое сохранение будет две координаты, это:
 
SetPlayerCameraPos
SetPlayerCameraLookAt
 
Функции полета будут действовать в любом паблике, можете вставить в команду, либо в заданную функцию, неважно. Полет будет осуществляться везде.
 
Спасибо за внимание. Надеюсь урок был для вас познавательным.
 
Автор:Алексей Мещеряков
  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.