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

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

Закрытая тема
 
JassMan
свободен
offline
Опыт: 4,193
Активность:
TriggerRemoveAction
Я хотел научится полностью удалять триггер из памяти игры, и дошёл до этой функции, и застрял на ней.
Приведу к примеру код:
function My_Function takes nothing returns nothing
local trigger trg=GetTriggeringTrigger()
call TriggerRemoveAction(trg,GetAttachedTriggerAction(trg,"My_Function"))
call DestroyTrigger(trg)
set trg=null
endfunction

function InitTrig_My_Trig takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT) //В принципе, не важно какое событие.
call TriggerAddAction(trg,function My_Function)
set trg=null
endfunction
Выдаёт ошибку в строчке call TriggerRemoveAction(trg,GetAttachedTriggerAction(trg,"My_Function")): Отсутствует название.
Если закоментить эту строку, то всё нормально. Так что это 100% эта строка виновата.
Я уже везде пытался найти опечатку у себя, думал может что не правильно написал — так нет, всё верно!
Так как же удалить правильно Action от триггера?
  
  
 
 
Старый 30.11.2010, 15:22
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
я пользуюсь этим
call TriggerClearActions(trg)
Старый 30.11.2010, 15:34
Nekit1234007

offline
Опыт: 11,916
Активность:
GetAttachedTriggerAction — это вообще откуда? 16гб говорит правду.
Старый 30.11.2010, 15:51
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Альтернатива очистке - удаление:
((код jass
globals
trigger T = null
triggeraction TA = null
triggercondition TC = null
endglobals
))
((код jass
trigger creation
set T = CreateTrigger()
set TA = TriggerAddAction(T, function A)
set TC = TriggerAddCondition(T, Condition(function B))
))
((код jass
delete trigger
call TriggerRemoveAction(T, TA)
call TriggerRemoveCondition(T, TC)
call DestroyTrigger(T)
))
Старый 30.11.2010, 16:52
JassMan
свободен
offline
Опыт: 4,193
Активность:
Nekit1234007 это я нашёл в CasterSystem.j
В общем, народ, как полностью удалить триггер из памяти игры?
Достаточно ли этого? :
call TriggerRemoveAction(T, TA)
call TriggerRemoveCondition(T, TC)
call DestroyTrigger(T)
Старый 30.11.2010, 18:07
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
я делаю так
call TriggerClearActions(tt)
call TriggerClearConditions(tt)
call DestroyTrigger(tt)
Старый 30.11.2010, 18:17
JassMan
свободен
offline
Опыт: 4,193
Активность:
ну а remove чем отличается?
Это как с группами? clear чистит но не удаляет, а remove уже память игры освобождает.
Старый 30.11.2010, 18:20
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
это удаляет все действия и условия тригера, твои удаляют 1 условие или одно действие
Старый 30.11.2010, 18:23
JassMan
свободен
offline
Опыт: 4,193
Активность:
всё тобою сказанное противоречит тому, что Алекс написал:
set TA = TriggerAddAction(T, function A)
Старый 30.11.2010, 19:56
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
а если в тригере 80 действий что по одному удалять?
Старый 30.11.2010, 20:04
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
JassMan,
не противоречит, внимательно прочитай, это альтернатива. Значение слова альтернатива не есть
противоречие )), ну думаю просто ты не заметил, не важно я отошел от темы.
Точный ответ на твой вопрос тебе может дать только составитель нативок, то-есть разработчики близзарда.
Ну из моего предположения: ремув сработает быстрее, тк система сразу получит указатель на действие триггера, а очистка потребует некоторого времени на самостоятельный поиск этого указателя.
Ну как видишь исходя из моей логики я бы офк пользовался бы remove'ом, но если у тебя кол-во действий в триггере велико, то пользуйся очисткой. А в общем ты зря время тратишь на такие тонкости
Старый 30.11.2010, 21:20
Klop
Папа римский
offline
Опыт: 13,006
Активность:
У меня вопрос по этой теме,если я сделаю как сделал AlexKARASb, то дейсвия будут удалятся,а при новом событии заново создаватся,т.е не удаляя в конце дейсвия и условия является утечкой??? или это не обязательно
Старый 30.11.2010, 21:46
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
то дейсвия будут удалятся,а при новом событии заново создаватся?
ничего само собой не создается, действия создаются непосредственно заданным вами кодом.
переформулируйте свой вопрос, тк не понятно что в вопросе вы хотели спросить.
не удаляя в конце дейсвия и условия является утечкой?
И да это будет утечкой - не удалить триггер полностью
это не обязательно?
каждый ваш вопрос страннее предыдущего, обязательность растяжимое понятие.
При рациональном управлении данными, да; а при решении задачи любыми способами лишь бы был результат, нет.
Старый 30.11.2010, 22:21
Klop
Папа римский
offline
Опыт: 13,006
Активность:
AlexKARASb:
При рациональном управлении данными
AlexKARASb:
И да это будет утечкой - не удалить триггер полностью
Cпасибо то что надо)
Старый 30.11.2010, 22:49
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
вообще вроде полностью удалить триггер невозможно, так что лучше думать о целесообразности использования такой конструкции
Старый 30.11.2010, 22:51
DioD

offline
Опыт: 45,134
Активность:
идиоты...
отсоединение действия от триггера не уничтожает это действие...
Старый 04.12.2010, 15:26
Закрытая тема

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

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

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

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



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