Активный
- Тема Автор
- #1
Анимации делают игру более живой и реалистичной. Разберем работу с ними.
Применение анимации
Параметры:
- animlib - библиотека анимации
- animname - название анимации
- fDelta - скорость анимации (4.1 - нормальная)
- loop - зацикливание (1 - да, 0 - нет)
- lockx, locky - блокировка движения
- freeze - заморозка игрока
- time - время анимации
- forcesync - принудительная синхронизация
Остановка анимации
Популярные библиотеки анимаций:
- DANCING - танцы
- PED - базовые анимации
- COP_AMBIENT - анимации полиции
- GANGS - анимации банд
- ON_LOOKERS - наблюдение
- DEALER - торговец
- SMOKING - курение
- FOOD - еда
- BAR - бар
- SHOP - магазин
Пример: команды анимаций
Пример: автоматические анимации
Проверка анимации
Пример: система жестов
Важные моменты:
- Останавливайте анимации при необходимости
- Используйте правильные параметры для разных ситуаций
- Проверяйте анимации перед применением
- Синхронизируйте анимации для всех игроков
Анимации делают игру более живой и интересной!
Применение анимации
Код:
ApplyAnimation(playerid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time, forcesync);
// Пример:
ApplyAnimation(playerid, "DANCING", "dance_loop", 4.1, 1, 0, 0, 0, 0, 0);
Параметры:
- animlib - библиотека анимации
- animname - название анимации
- fDelta - скорость анимации (4.1 - нормальная)
- loop - зацикливание (1 - да, 0 - нет)
- lockx, locky - блокировка движения
- freeze - заморозка игрока
- time - время анимации
- forcesync - принудительная синхронизация
Остановка анимации
Код:
ClearAnimations(playerid);
// или
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 0, 0);
Популярные библиотеки анимаций:
- DANCING - танцы
- PED - базовые анимации
- COP_AMBIENT - анимации полиции
- GANGS - анимации банд
- ON_LOOKERS - наблюдение
- DEALER - торговец
- SMOKING - курение
- FOOD - еда
- BAR - бар
- SHOP - магазин
Пример: команды анимаций
Код:
CMD:dance(playerid, params[])
{
new danceid;
if(sscanf(params, "i", danceid))
{
SendClientMessage(playerid, -1, "Использование: /dance [1-4]");
return 1;
}
switch(danceid)
{
case 1: ApplyAnimation(playerid, "DANCING", "dance_loop", 4.1, 1, 0, 0, 0, 0, 0);
case 2: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_A", 4.1, 1, 0, 0, 0, 0, 0);
case 3: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_B", 4.1, 1, 0, 0, 0, 0, 0);
case 4: ApplyAnimation(playerid, "DANCING", "DAN_LOOP_C", 4.1, 1, 0, 0, 0, 0, 0);
default: SendClientMessage(playerid, -1, "Неверный номер танца (1-4)");
}
return 1;
}
CMD:stopanim(playerid, params[])
{
ClearAnimations(playerid);
SendClientMessage(playerid, -1, "Анимация остановлена");
return 1;
}
CMD:handsup(playerid, params[])
{
ApplyAnimation(playerid, "ROB_BANK", "SHP_HandsUp_Scr", 4.0, 0, 1, 1, 1, 0, 0);
SendClientMessage(playerid, -1, "Руки вверх!");
return 1;
}
CMD:smoke(playerid, params[])
{
ApplyAnimation(playerid, "SMOKING", "M_smklean_loop", 4.0, 1, 0, 0, 0, 0, 0);
SendClientMessage(playerid, -1, "Вы закурили");
return 1;
}
CMD:drink(playerid, params[])
{
ApplyAnimation(playerid, "BAR", "dnk_stndF_loop", 4.0, 1, 0, 0, 0, 0, 0);
SendClientMessage(playerid, -1, "Вы пьете");
return 1;
}
CMD:sit(playerid, params[])
{
ApplyAnimation(playerid, "PED", "SEAT_idle", 4.0, 1, 0, 0, 0, 0, 0);
SendClientMessage(playerid, -1, "Вы сели");
return 1;
}
CMD:wave(playerid, params[])
{
ApplyAnimation(playerid, "PED", "handsup", 4.0, 0, 0, 0, 0, 0, 0);
SendClientMessage(playerid, -1, "Вы помахали рукой");
return 1;
}
Пример: автоматические анимации
Код:
public OnPlayerSpawn(playerid)
{
// Анимация при спавне
ApplyAnimation(playerid, "PED", "IDLE_tired", 4.0, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
// Анимация смерти
ApplyAnimation(playerid, "PED", "KO_shot_front", 4.0, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
if(!ispassenger)
{
// Анимация входа в транспорт
ApplyAnimation(playerid, "CAR", "CAR_getin_LHS", 4.0, 0, 0, 0, 0, 0, 0);
}
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
// Анимация выхода из транспорта
ApplyAnimation(playerid, "CAR", "CAR_getout_LHS", 4.0, 0, 0, 0, 0, 0, 0);
return 1;
}
Проверка анимации
Код:
new animlib[32], animname[32];
GetAnimationName(GetPlayerAnimationIndex(playerid), animlib, sizeof(animlib), animname, sizeof(animname));
// Проверка конкретной анимации
if(!strcmp(animlib, "DANCING") && !strcmp(animname, "dance_loop"))
{
// Игрок танцует
}
Пример: система жестов
Код:
CMD:gesture(playerid, params[])
{
new gestureid;
if(sscanf(params, "i", gestureid))
{
SendClientMessage(playerid, -1, "Использование: /gesture [1-10]");
SendClientMessage(playerid, -1, "1-Руки вверх 2-Помахать 3-Пожать плечами 4-Нет 5-Да");
return 1;
}
switch(gestureid)
{
case 1: ApplyAnimation(playerid, "ROB_BANK", "SHP_HandsUp_Scr", 4.0, 0, 1, 1, 1, 0, 0);
case 2: ApplyAnimation(playerid, "PED", "handsup", 4.0, 0, 0, 0, 0, 0, 0);
case 3: ApplyAnimation(playerid, "PED", "IDLE_tired", 4.0, 0, 0, 0, 0, 0, 0);
case 4: ApplyAnimation(playerid, "GANGS", "prtial_gngtlkA", 4.0, 0, 0, 0, 0, 0, 0);
case 5: ApplyAnimation(playerid, "GANGS", "prtial_gngtlkB", 4.0, 0, 0, 0, 0, 0, 0);
default: SendClientMessage(playerid, -1, "Неверный номер жеста");
}
return 1;
}
Важные моменты:
- Останавливайте анимации при необходимости
- Используйте правильные параметры для разных ситуаций
- Проверяйте анимации перед применением
- Синхронизируйте анимации для всех игроков
Анимации делают игру более живой и интересной!