[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Движение камеры при коннекте
Дата: 12.01.2011, Среда, 19:01:51 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 101
Репутация: 155+
Сделаем простенькую камеру для ГФ , хотя она подойдет и под другие моды.
Сам код данного способа по себе легкий. Поэтому для новичков в павн будет не трудно выполнить все этапы FAQ и при этом добиться успеха.

Ну чтож начнем.

Для начала создадим новый таймер.

Идем в public OnGameModeInit
У вас там будет около 9-ти таймеров, расположенных внизу паблика.
Добавляете ище один - SetTimer("Cam",100,1); (100 - милисекунды. 1 - Будет или не будет повторяться таймер. У нас 1 = будет. cam - название нашего паблика для выполнения какого либо дальнейшего кода)
По скольку в преднастройке таймера стоит значение 1 он будет повторять выполнение паблика Cam каждую милисекунду.
Благодаря этому мы и сделаем наше дельце

Теперь ко всем new добавим следующие переменные:

new Float:CamX[MAX_PLAYERS];
new Float:CamY[MAX_PLAYERS];
new Float:CamZ[MAX_PLAYERS];
new Camtime[MAX_PLAYERS];

Таким образом наш скрипт выучил что такое CamY CamX CamZ Camtime.

Теперь идем в public OnPlayerRequestClass (мог ошибиться, но основу я дал)
Добавляем следующий код в начало паблика.

CamX[playerid] = 1987.1801;
CamY[playerid] = -1439.9788;
CamZ[playerid] = 217.5764;

Мы задаем значения коодинат в переменные созданные ранее. С них мы будем считывать координаты для начальной позиции камеры.
(Координаты свои. Можете сделать свои с помощью /save но для вида рекомендую сначало мои использовать т.к под них подстраиваеться дальнейший код движения камеры).

Далее идем в public OnPlayerConnect

И т.к мы хотим что бы наша камера начинала свои движения при подключении к серверу то добавляем такой кодик:

Camtime[playerid] = 1;

Далее идем в public OnPlayerSpawn
Добавляем следующее:

Camtime[playerid] = 0;

И если у вас нет в данном паблике функции SetCameraBehindPlayer то обязательно добавьте её иначе камера зависнит в воздухе а вы будите бегать Х знает где :)

SetCameraBehindPlayer(playerid); // Возвращает камеру игрока на стандартную позицию.

Всё это лучше кАнешно в начало добавлять.
Моды бывают разные.

Ну вот вроде бы мы создали небольшие закорючки для нашей с вами камеры.
Теперь нам необходимо написать код выполняющий движение камеры. он самый основной из нашего FAQ.
Да и легкий ... )

Создаем в конце мода public Cam()
Вобщем код движения камеры будет выглядеть примерно так:

Code
public Cam()   
{   
for(new i = 0; i < MAX_PLAYERS; i++)   
{   
if(IsPlayerConnected(i))   
{   
if(Camtime[i] >= 1) // омг.. В таймерах объяснял что это. )   
{   
CamX[i] -= 0.4; // Для того что бы вам было понятней - Ето скорость движения камеры. Не рекомендую лесть до 1.0. А вот 0.9 норм =_=   
SetPlayerCameraPos(i,CamX[i],CamY[i],CamZ[i]); // Позиция нашей камеры которая в дальнейшем каждую милисекунду будет изменяться брав значения из переменных.   
SetPlayerCameraLookAt(i,818.5380,-1402.7738,223.9858); // Куда наша камера - смотрит.   
}   
}   
}   
}

Камера готова

Вы можете изменить координаты и поднастроить камеру под них. (/save)

Напоминаю что камеры создают дополнительную нагрузку на сервер.
Но для хорошего хостинга это не проблема на мой взгляд
И мода тоже

Тестирование и разработка кода производилась на моде Cream Life 1.2

АВТОР:SMOUK

-ики нежалеем=))

Дата: 12.01.2011, Среда, 19:03:07 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 114
Репутация: 262+
Неплохой урок, потом пригодится мне)
Дата: 12.01.2011, Среда, 19:06:06 | Сообщение # $NUMBER
Группа: Проверенные
Сообщений: 101
Репутация: 155+
Надеюсь
Дата: 12.01.2011, Среда, 20:27:06 | Сообщение # $NUMBER
Группа: Удаленные
Сообщений:
Репутация: +
Неоптимизировано, можно было сделать на много оптимемезирование, даже без лишних переменных, и бесконечного таймера.
  • Страница 1 из 1
  • 1
Поиск: