Возник вопрос:как сделать скилл чтобы герой взлетал в воздух парил несколько секунд и приземлялся в указанную точку нанося урон.Какнанестиурон я знаю но как сделать чтобы персонаж взлетал и плавно летел в указаную точку преземляясь? Заранее спасибо
function Trig_Number_1_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit caster = LoadUnitHandle(udg_hash, hid, 0) local real d = LoadReal(udg_hash, hid, 1) local real z = LoadReal(udg_hash, hid, 2) local real angle = LoadReal(udg_hash, hid, 3) local real dm = LoadReal(udg_hash, hid, 4) local real x = GetWidgetX(caster) local real y = GetWidgetY(caster) if d <= dm / 2 then set x = x + 10. * Cos(angle * bj_DEGTORAD) set y = y + 10. * Sin(angle * bj_DEGTORAD) set z = z + 25. call SetUnitPosition(caster, x, y) call SetUnitFlyHeight(caster, z, 0.) else set x = x + 10. * Cos(angle * bj_DEGTORAD) set y = y + 10. * Sin(angle * bj_DEGTORAD) set z = z - 25. call SetUnitPosition(caster, x, y) call SetUnitFlyHeight(caster, z, 0.) endif call SaveReal(udg_hash, hid, 1, d + 10.) call SaveReal(udg_hash, hid, 2, z) if z <= 0. then call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_hash, hid) endif set caster = null set t = null endfunction
function Trig_Number_1_Actions takes nothing returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local real x = GetWidgetX(caster) local real y = GetWidgetY(caster) local real z = 10. local real angle = 57.295827 * Atan2(GetSpellTargetY() - y, GetSpellTargetX() - x) call SaveUnitHandle(udg_hash, hid, 0, caster) call SaveReal(udg_hash, hid, 2, z) call SaveReal(udg_hash, hid, 3, angle) call SaveReal(udg_hash, hid, 4, SquareRoot((GetSpellTargetX() - GetWidgetX(caster)) * (GetSpellTargetX() - GetWidgetX(caster)) + (GetSpellTargetY() - GetWidgetY(caster)) * (GetSpellTargetY() - GetWidgetY(caster)))) if UnitAddAbility(caster, 'Amrf') then call UnitRemoveAbility(caster, 'Amrf') endif call TimerStart(t, .01, true, function Trig_Number_1_Timer) set caster = null set t = null endfunction
function InitTrig_Number_1 takes nothing returns nothing set gg_trg_Number_1 = CreateTrigger() call TriggerRegisterAnyUnitEventBJ(gg_trg_Number_1, EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition(gg_trg_Number_1, Condition( function Trig_Number_1_Conditions)) call TriggerAddAction(gg_trg_Number_1, function Trig_Number_1_Actions) endfunction
требует переменную hash типа хэштаблица. В триггере инициализации карты всавь личный сценарий:
я канечно в Jass'е не шарю, но ты где такое ускорение видел?((( уж лучше прибовлять по 25 24 23 ... 5 4 3 2 1 и потом отнимать по 1 2 3 4 5 ... 23 24 25 каждые 0.02 сек
Добавлено (18 Ноябрь 2011, 18:13:42) ---------------------------------------------
Quote (Ty3uK)
браться не буду - ужасно муторно и бажно
если умеешь делать, то сделашь без бажно и на GUI (если это технически возможно)
Сообщение отредактировал Extremator - Пятница, 18 Ноября 2011, 18:46:48
Какое ускорение? Ты вообще о чем? Это, если что, высота. Я делал прыжок, а не полет, так что "ускорение" нормальное.
Добавлено (18 Ноябрь 2011, 18:30:57) --------------------------------------------- Еах, каждые .02... ТруЪ период, чо. А еще- прыжок на гуи в сущности идет на цикле, что не есть отлично
Ускорение (если брать физику, как ты хочешь) равно 25 и каждые .04 секунды высота просто увеличивается на 25. Когда доходит до пика ускорение отнимается
Archmage, у тя только один герой будет использовать абилку? или их таких на карте может быть несколько?
Добавлено (18 Ноябрь 2011, 18:54:45) ---------------------------------------------
Quote (Ty3uK)
Ускорение (если брать физику, как ты хочешь) равно 25 и каждые .04 секунды высота просто увеличивается на 25. Когда доходит до пика ускорение отнимается
я имел ввиду мнимое ускорение... что бы он подбираясь к максимум высоты набирал/терял высоту не так стремительно как при старте/приземлении