AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
Один из методов OOP, его правильное использоване
Доброго всем времени суток.
Неделю назад в одной из тем jass'а DioD посоветовал использовать вместо стандартного создавания таймера на юните, с последующим удалением его при окончании действия на такой пример:
» CodeFromExample
Пользуясь таким методом диспечер задач показывает небольшое использование памяти, однако при использовании приема в разных спелах приводит к большим лагам
Пояснение предыдущей строки: 1\3 всех триггов я перевел на этот прием, в итоге получил задержку в пол секунды постоянно, она не подымаеться, но и не понижаеться из-за постоянных переборов структур как пример спел с передвижением юнита
» SpellПытаясьпонятьсутьприема
scope Jump
include "cj_types_priv.j" define { private Spell1 = 'A01N' private Speed = 30.00 } private struct Data unit u real a real r real t endstruct function ParabolaZ takes real h, real d, real x returns real
return (4 * h / d) * (d - x) * (x / d) endfunction private bool Conditions() { return GetSpellAbilityId() == Spell1 } private void Move() { Data D = 0 real x = 0.00 real y = 0.00 real z = 0.00 integer i = 0 loop D = D + 1 if D.u!=null then x = GetUnitX(D.u)+Speed*Cos(D.a) y = GetUnitY(D.u)+Speed*Sin(D.a) z = GetUnitFlyHeight() if MapContainsCoords(x,y) and D.t < D.r then D.t=D.t+Speed SetUnitX(D.u, x) ; SetUnitY(D.u, y) SetUnitFlyHeight( D.u, ParabolaZ(D.r/2,D.r,D.t), 0 ) else D.u=null D.a=0.00 D.r=0.00 D.destroy() endif endif exitwhen i >= 5 endloop } private void Actions() { real xt = GetSpellTargetX() real yt = GetSpellTargetY() real x = 0.00 real y = 0.00 Data D = Data.create() D.u = GetSpellAbilityUnit() x = GetUnitX(D.u) y = GetUnitY(D.u) D.r = SquareRoot((yt-y)*(yt-y)+(xt-x)*(xt-x)) D.t = 0.00 SetUnitAnimationByIndex(D.u, 2) UnitAddAbility(D.u, 'Arav') UnitRemoveAbility(D.u, 'Arav') if GetSpellAbilityId() == Spell1 then D.a = Atan2(yt-y, xt-x) else D.a = Atan2(y-yt, x-xt) endif } ===========================================================================
function InitTrig_Jump takes nothing returns nothing timer t = CreateTimer() TimerStart(t, 0.03, true, function Move) gg_trg_Jump = CreateTrigger( ) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(0),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(1),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(2),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(3),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(4),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(5),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(6),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(7),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(8),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerRegisterPlayerUnitEvent(gg_trg_Jump,Player(9),EVENT_PLAYER_UNIT_SPELL_EFFECT,null) TriggerAddCondition(gg_trg_Jump, Condition( function Conditions ) ) TriggerAddAction(gg_trg_Jump, function Actions) t=null endfunction endscope "" Обьясните пожалуйста что я упустил, не понял. Если суть разложил не ясно, напишите, исправлю 1 пост на более внятную речь |
15.06.2010, 23:51 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
ни разу не видел в ооп метода "кривые абилки" ... |
16.06.2010, 00:03 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
|
16.06.2010, 00:06 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
я не шарю в ооп, +знаний в языках программирования 0 здесь пытаюсь просто понять в чем же рационален тот или иной способ исполнения спелов и помоему в первом посте это я и не написал, завтра исправлю |
16.06.2010, 00:22 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
AlexKARASb
Learning cpp
offline
Опыт:
22,103Активность: |
тему клоуз |
16.06.2010, 18:47 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|