|
|
|
|
1й скилл на jass
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 15:07:57 | Сообщение # 1 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| Я написал свой 1й jasss скилл. Суть его в том, что плавно летит ракета в чувака, а если он ходит то поворачивает за ним. НО! я ставлю call PolledWait( 0.01 ), но все равно двигается рывками :\\
помогите плиз, что нужно написать что бы была плавная анимация?
|
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 15:45:26 | Сообщение # 2 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Использовать таймеры.
|
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 15:47:46 | Сообщение # 3 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| Ответа глупее я и ожидать не мог))
Может кто-нибудь знающий поможет плиз?)
|
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 16:33:18 | Сообщение # 4 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Code globals constant hashtable udg_Hash = InitHashtable() constant integer Spell_Rocket_Ability = 'A000' constant integer Spell_Rocket_Dummy = 'h000' constant real Spell_Rocket_Speed = 20.//speed * period constant real Spell_Rocket_Period = .05 constant real Spell_Rocket_ExplodeRange = 100. endglobals
constant function Trig_Rocket_Damage takes integer level returns real return 50. + level * 100. endfunction
function Trig_Rocket_Conditions takes nothing returns boolean return GetSpellAbilityId() == Spell_Rocket_Ability endfunction
function Trig_Rocket_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer id = GetHandleId(t) local unit r = LoadUnitHandle(udg_Hash, id, 0) local unit u2 = LoadUnitHandle(udg_Hash, id, 1) local real x = GetWidgetX(r) local real y = GetWidgetY(r) local real x2 = GetWidgetX(u2) local real y2 = GetWidgetY(u2) local real a = Atan2(y2 - y, x2 - x) if IsUnitInRange(r, u2, Spell_Rocket_ExplodeRange) then call UnitDamageTarget(r, u2, LoadReal(udg_Hash, id, 2), true, false, null, DAMAGE_TYPE_MAGIC, null) call KillUnit(r) //call PauseTimer(t) call DestroyTimer(t) call FlushChildHashtable(udg_Hash, id) else call SetUnitFacing(r, a * 57.296) call SetUnitX(r, x + Cos(a) * Spell_Rocket_Speed) call SetUnitY(r, y + Sin(a) * Spell_Rocket_Speed) endif set t = null set r = null set u2 = null endfunction
function Trig_Rocket_Actions takes nothing returns nothing local timer t = CreateTimer() local integer id = GetHandleId(t) local unit u = GetTriggerUnit() local unit u2 = GetSpellTargetUnit() local real x = GetWidgetX(u) local real y = GetWidgetY(u) call SaveAgentHandle(udg_Hash, id, 0, CreateUnit(GetOwningPlayer(u), Spell_Rocket_Dummy, x, y, Atan2(GetWidgetY(u2) - y, GetWidgetX(u2) - x) * 57.296)) call SaveAgentHandle(udg_Hash, id, 1, u2) call SaveReal(udg_Hash, id, 2, Trig_Rocket_Damage(GetUnitAbilityLevel(u, Spell_Rocket_Ability))) call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer) set t = null set u = null set u2 = null endfunction
function InitTrig_Rocket takes nothing returns nothing local trigger trig = CreateTrigger() local integer i = 0 loop call TriggerRegisterPlayerUnitEvent(trig, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) exitwhen i == 11 set i = i + 1 endloop call TriggerAddCondition(trig, Condition(function Trig_Rocket_Conditions)) call TriggerAddAction(trig, function Trig_Rocket_Actions) set trig = null endfunction
|
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 17:53:21 | Сообщение # 5 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| и?
|
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 17:59:12 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (-Velikolepniy-) что нужно написать, чтобы была плавная анимация
|
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 18:09:34 | Сообщение # 7 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| я нифига не понимаю) constant real Spell_Rocket_Period = .05 я так понял это частота //call PauseTimer(t) call DestroyTimer(t)
а где время таймера обозначается?)
мне нужна была просто подсказка как это делается, а скил я сам уж сделаю)
|
|
|
|
Bibo | Дата: Суббота, 21 Июля 2012, 18:11:22 | Сообщение # 8 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Quote (-Velikolepniy-) а где время таймера обозначается?) call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer)
|
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 18:12:56 | Сообщение # 9 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| С помощью wait'ов плавно сделать нельзя. Нужно использовать таймеры.Quote (-Velikolepniy-) а где время таймера обозначается?) Нигде. Ракета может лететь сколько угодно, пока не достигнет цели.
|
|
|
|
Pocifik | Дата: Суббота, 21 Июля 2012, 18:13:20 | Сообщение # 10 |
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
| Quote (-Velikolepniy-) мне нужна была просто подсказка как это делается, а скил я сам уж сделаю) Создаешь таймер при применении способности, записываешь все нужные значения в хендл уникального айди таймера, запускаешь таймер с нужным периодом (повторяющийся), в таймере загружаешь все значения и делаешь движения.
Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:14:26 |
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 18:14:21 | Сообщение # 11 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| call TimerStart(t, Spell_Rocket_Period, true, function Trig_Rocket_Timer)
т - таймер, Spell_Rocket_Period-время таймера
а true, function Trig_Rocket_Timer что это?
|
|
|
|
Pocifik | Дата: Суббота, 21 Июля 2012, 18:15:34 | Сообщение # 12 |
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
| Quote (-Velikolepniy-) а true, function Trig_Rocket_Timer что это? Тру, это значит таймер повторятся будет, а функция это название функции, которая будет запускаться при каждом срабатывании таймера (0.05 сек в данном случаи)
Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:15:53 |
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 18:16:04 | Сообщение # 13 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (common.j) Code native TimerStart takes timer whichTimer, real timeout, boolean periodic, code handlerFunc returns nothing
|
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 18:16:50 | Сообщение # 14 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| ну вот мой код) я не понимаю что там не так)
function Trig_Spell_Conditions takes nothing returns boolean if ( not ( GetSpellAbilityId() == 'A006' ) ) then return false endif return true endfunction
function Trig_Jakiro1_Actions takes nothing returns nothing local unit chel local unit kaster local unit dummy local integer i = 0 set udg_Kaster_banshi = GetSpellAbilityUnit() set kaster = udg_Kaster_banshi set udg_Target_banshi = GetSpellTargetUnit() set chel = udg_Target_banshi call CreateNUnitsAtLoc( 1, 'h004', Player(0), GetUnitLoc(udg_Kaster_banshi), bj_UNIT_FACING ) set dummy = GetLastCreatedUnit() loop exitwhen i > 10 if ( not ( DistanceBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel)) < 50.00 ) ) then call SetUnitPositionLocFacingBJ( dummy, PolarProjectionBJ(GetUnitLoc(dummy), 10.00, AngleBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel))), AngleBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(chel)) ) call TriggerSleepAction( .02 ) else set i = 11 call KillUnit( dummy ) endif endloop endfunction
//=========================================================================== function InitTrig_Spell takes nothing returns nothing set gg_trg_Spell = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Spell, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Spell, Condition( function Trig_Jakiro1_Conditions ) ) call TriggerAddAction( gg_trg_Spell, function Trig_Jakiro1_Actions ) endfunction
|
|
|
|
Bibo | Дата: Суббота, 21 Июля 2012, 18:17:41 | Сообщение # 15 |
Группа: Проверенные
Сообщений: 741
Награды: 0
Блокировки:
| Quote (-Velikolepniy-) а true, function Trig_Rocket_Timer что это? true = таймер запускается заного по истечению времени false = таймер выполнит действие однократно и отключится Trig_Rocket_Timer = название функции которая будет выполнена по истечению таймера
|
|
|
|
SirNikolas | Дата: Суббота, 21 Июля 2012, 18:18:18 | Сообщение # 16 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (-Velikolepniy-) loop Quote (-Velikolepniy-) TriggerSleepAction Quote (-Velikolepniy-) endloop Вот что не так. Ожидания в цикле криво работают.
|
|
|
|
Pocifik | Дата: Суббота, 21 Июля 2012, 18:20:24 | Сообщение # 17 |
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
| -Velikolepniy-, тебе надо всё переделывать, использовать функцию ожидания нельзя, когда нужен мелкий период, по этому надо делать через таймер.
Сообщение отредактировал Pocifik - Суббота, 21 Июля 2012, 18:20:44 |
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 18:21:16 | Сообщение # 18 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| ну вооот((
|
|
|
|
Pocifik | Дата: Суббота, 21 Июля 2012, 18:22:23 | Сообщение # 19 |
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
| -Velikolepniy-, кстати у тебя код утечен, и вообще он очень не очень.
|
|
|
|
-Velikolepniy- | Дата: Суббота, 21 Июля 2012, 18:26:22 | Сообщение # 20 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| ну первый код, как могу) Добавлено (21 Июля 2012, 18:26:22) --------------------------------------------- Блин, дайте ссылку плиз на статейку по таймерам)
|
|
|
|
lawson | Дата: Воскресенье, 22 Июля 2012, 01:26:34 | Сообщение # 21 |
Группа: Проверенные
Сообщений: 3482
Награды: 0
Репутация: 974
Блокировки:
| Quote (SirNikolas) Использовать таймеры. Quote (-Velikolepniy-) Ответа глупее я и ожидать не мог Quote (SirNikolas) что нужно написать Quote (-Velikolepniy-) я нифига не понимаю) Да согласен, этот Николас надоел своими нубожасс кодами, вообще ни че не шарит в этом ЖНПГ, че он забыл на этом форуме пусть идет учит основы жасс коддинга, чем учить здесь уже прошаренных.
Nic nie wiem bo mam chuj. редактирую посты! ВСЕ!
Сообщение отредактировал lawson - Воскресенье, 22 Июля 2012, 09:08:41 |
|
|
|
Pocifik | Дата: Воскресенье, 22 Июля 2012, 04:50:29 | Сообщение # 22 |
9 уровень
Группа: Проверенные
Сообщений: 1130
Награды: 1
Репутация: 495
Блокировки:
| -Velikolepniy-, кинул статью в лс, а то еще за спам примут.
|
|
|
|
-Velikolepniy- | Дата: Воскресенье, 22 Июля 2012, 10:22:57 | Сообщение # 23 |
4 уровень
Группа: Проверенные
Сообщений: 83
Награды: 0
Репутация: 14
Блокировки:
| Спс)
|
|
|
|
SirNikolas | Дата: Воскресенье, 22 Июля 2012, 10:25:56 | Сообщение # 24 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Вот еще, почитай.
|
|
|
|
|
|
|
|
|
|
|