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

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

Закрытая тема
 
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Верно ли? Просто для очистки совести
Джассофицировал простейший триггер destroyspeceffect, который я вызываю в своей карте в других триггерах в тех случаях, когда требуется уничтожить последний созданный спецэффект ровно через 2 секунды (для предотвращения утечек, естественно).
Всё работает, но просто хотелось бы уточнить - действительно ли итоговый код устраняет утечку спецэффекта верно (а то мало ли, вдруг он рабочий, но действует не так как надо). Просто если совершу ошибку здесь, в карте появится множество утечек спецэффектов через заклинания :) А проверить затруднительно, ведь как я узнаю - остался ли спецэффект "висеть" в памяти? Внешне-то он в любом случае исчезнет.
Сам, ещё раз, ошибки не вижу. Но чем чёрт не шутит.

Код:
function DestroyEffect2 takes nothing returns nothing
local timer t=GetExpiredTimer()
local effect e=LoadEffectHandle(udg_Hash,GetHandleId(t),4)
set udg_se = e
call DestroyEffect( udg_se )
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call DestroyTimer(t)
set t=null
set e=null
endfunction

function Trig_destroyspeceffect_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local effect e = GetLastCreatedEffectBJ()
    call SaveEffectHandle(udg_Hash,GetHandleId(t),4,e)
    call TimerStart(t,2,false,function DestroyEffect2)
    set t=null
    set e=null
endfunction

//===========================================================================
function InitTrig_destroyspeceffect takes nothing returns nothing
    set gg_trg_destroyspeceffect = CreateTrigger(  )
    set udg_Hash=InitHashtable()
    call TriggerAddAction( gg_trg_destroyspeceffect, function Trig_destroyspeceffect_Actions )
endfunction
Старый 03.10.2011, 11:39
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
хм, а зачем в данном случае триггер? просто пихни функции DestroyEffect2 и Trig_destroyspeceffect_Actions в нестандартный код
Praudmur добавил:
вместо GetLastCreatedEffectBJ пользуйся сразу bj_lastCreatedEffect
Старый 03.10.2011, 11:48
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Praudmur, ты всё время говоришь об оптимизации, это хорошо, но я-то спрашиваю пока о том, делает ли триггер то, что надо ) Тем не менее спс за идею. Я как-то нестандартным кодом мало пока пользуюсь...
Старый 03.10.2011, 11:49
Praudmur
в поисках идей...
offline
Опыт: 3,604
Активность:
и зачем тебе нужна глобалка? юзай call DestroyEffect( e ). Также лучше всего инициировать хеш-таблицу при старте карты.
Praudmur добавил:
всё остальное нормально
Старый 03.10.2011, 11:51
Velociraptor
В пространстве и времени
offline
Опыт: 14,801
Активность:
Цитата:
Сообщение от Praudmur
Также лучше всего инициировать хеш-таблицу при старте карты.

Помню, но хз почему - пока как-то привычнее в триггер каждый раз её пихать ( Знаю, что тупо, но это к теме не относится.

Цитата:
Сообщение от Praudmur
всё остальное нормально

ок, спасибо
можно крыть
Старый 03.10.2011, 11:52
Закрытая тема

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

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

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

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



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