Перейти к содержанию
Авторизация  
#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-файлов, или продолжить без изменения настроек.