XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
herr_horror
Фиолетовый андроид
offline
Опыт: 139
Активность:
Вопрос: Активное триггерное/джазовое заклинание с нестандартной анимацией
Приветствую всех! Это мое первое сообщение на этом форуме, будьте, пожалуйста, снисходительны к новичку.

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

Итак, задача:
Есть Юнит/Герой/Неважно. Хочется этому герою, пусть это будет, например, Гуля, сделать активное заклинание "Прыжок" (как герой-тигрица в доте). Анимация у гули есть - "Attack -1" или "Stand Victory" - я хочу, чтобы по использованию спела "Прыжок" воспроизводилась анимация какого-то рода, объект перемещался в плоскости XY, а в координате Z двигался по параболе. Пусть скорости Vx, Vy заданы, ускорение свободного падения тоже.

Задача посложнее
То же самое, но анимацию вообще взять другую. Не от этого героя. Такое возможно?


Буду очень благодарен, если вы мне поможете.
Старый 08.01.2007, 00:36
J
expert
offline
Опыт: 48,447
Активность:
Вот... на тебе маю функцию:

SCV функции надеюсь ты знаеш...


Код:
function pusk_Timer takes nothing returns nothing
    local timer Timer  = GetExpiredTimer()        
    local real  Xstart =     get_object_rparam (Timer, "Xstart" )
    local real  Ystart =     get_object_rparam (Timer, "Ystart" )
    local real  Zstart =     get_object_rparam (Timer, "Zstart" )    
    local real  SpeedX =     get_object_rparam (Timer, "SpeedX" )            
    local real  SpeedY =     get_object_rparam (Timer, "SpeedY" )
    local real  SpeedZ =     get_object_rparam (Timer, "SpeedZ" )    
    local real  t      =     get_object_rparam (Timer, "t"      )
    local real  g      =     get_object_rparam (Timer, "g"      )          
    local real  Ftorm  =     get_object_rparam (Timer, "Ftorm"  )
    local real  SpeedTime=   get_object_rparam (Timer, "SpeedTime")    
    local unit  u      = I2U(get_object_iparam (Timer, "u"      ))
    local real  X      = Xstart + SpeedX*t - CosBJ(Ftorm)*t*t
    local real  Y      = Ystart + SpeedY*t - SinBJ(Ftorm)*t*t                      
    local real  Z      = Zstart + SpeedZ*t - g*t*t        
    call SetUnitPosition ( u, X, Y)
    call SetUnitFlyHeight( u, Z, 1000000000.0 )        
    if GetUnitFlyHeight(u) <= 1 then
        call DestroyTimer (Timer)
        call flush_object (Timer)
    endif
    call set_object_rparam (Timer, "t"  , t+SpeedTime )
    set Timer = null
    set u  = null                                                              
endfunction

function pusk takes unit u, real SpeedXYZ, real GAngle, real VAngle, real g, real Ftorm, real SpeedTime returns nothing
    local timer Timer = CreateTimer ()
    local real SpeedXY = SpeedXYZ * Cos(VAngle * bj_DEGTORAD)    
    local real SpeedX  = SpeedXY  * Cos(GAngle * bj_DEGTORAD)
    local real SpeedY  = SpeedXY  * Sin(GAngle * bj_DEGTORAD)
    local real SpeedZ  = SpeedXYZ * Sin(VAngle * bj_DEGTORAD)    
    call TimerStart (Timer, 0.04, true, function pusk_Timer )    
    call set_object_iparam (Timer, "u"        , H2I(u)     )
    call set_object_rparam (Timer, "Xstart"   , GetUnitX(u))
    call set_object_rparam (Timer, "Ystart"   , GetUnitY(u))
    call set_object_rparam (Timer, "Zstart"   , RMaxBJ(GetUnitFlyHeight(u),2) )    
    call set_object_rparam (Timer, "SpeedX"   , SpeedX     )
    call set_object_rparam (Timer, "SpeedY"   , SpeedY     )
    call set_object_rparam (Timer, "SpeedZ"   , SpeedZ     )    
    call set_object_rparam (Timer, "t"        , 0          )
    call set_object_rparam (Timer, "g"        , g          )
    call set_object_rparam (Timer, "Ftorm"    , Ftorm      )
    call set_object_rparam (Timer, "SpeedTime", SpeedTime  )
    set Timer = null
endfunction


Функция запускаяется один раз, и движение продолжается только благодоря начальной скорости.
Движение прекращается как только юнит косается земли:

call pusk ( Юнит, пространственная скорость, Угол перемещения в горизонтальной плоскасти, Угол перемещения в вертикальной плоскасти, Ускорение свободного падения, Сила тринеия воздуха, скорость времени)

Цитата:
Сообщение от herr_horror
Анимация у гули есть - "Attack -1"

если есть сложности с проигрыванием подобных анимаций - вот статья:
http://xgm.guru/articles.php?section=wc3&name=play_animation

Отредактировано Jon, 08.01.2007 в 03:31.
Старый 08.01.2007, 00:44
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Джон, ты не ответил на 1 вопрос, за тебя отвечаю я. Юнит может проиграть только одну из присутствующих у него анимаций, то есть анимацию другого юнита воспроизвести нельзя.
Старый 08.01.2007, 03:23
DioD

offline
Опыт: 45,134
Активность:
  1. Любая анимация из доступных может быть проиграна, но одновременно только одна.
  2. Про движение сказали
  3. Можно переносить анимацию используя кастом модель, спецпрога есть в утилитах
Старый 08.01.2007, 09:10
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Цитата:
1) Любая анимация из доступных может быть проиграна, но одновременно только одна.

Мм, интересно было бы поглядеть на 2 одновременно играющиеся анимации... =)
Старый 09.01.2007, 20:45
herr_horror
Фиолетовый андроид
offline
Опыт: 139
Активность:
Цитата:
Сообщение от exploder
Мм, интересно было бы поглядеть на 2 одновременно играющиеся анимации... =)


А знаешь! Легко!
Шутка ли, но, когда я экспериментировал с кодом Jon'a я ошибся с объектом кастера и получилось, что у меня для двух разных юнитов с одинаковыми модельками, находящихся в той же точке пространства, проигрывались разные анимации. Это выглядело как дерганье, но я лицезрел чудо, как четырехрукая богиня-гуля дергалась в нервных конвульсиях. Выглядит мерзко)
Старый 11.01.2007, 13:21
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 13:25.