|
楼主 |
发表于 2011-4-19 17:05:56
|
显示全部楼层
引用第1楼zhuzeitou于2011-04-19 12:32发表的 :
删除触发的时候先把动作清除掉就好了啊,而且那一楼说的并不是set udg_t=CreateTrigger() 创建的触发有问题,而是call TriggerAddCondition(udg_t,Condition(function IsUnitEnemyEx))之后如果不清除会泄露,lz的理解本身就出现了偏差
另外,排泄跟动态注册有啥直接关系?排泄指的是排除内存泄漏的一系列行为,并不特指删除点啊删除触发之类,只要有可能会有内存泄漏就要排泄,和动态注册啊多次注册啊注册一次啊什么的没太大关系
嗯,感谢LS.
我还想问个问题.
就是动态注册事件中.何时需要排泄?何时不需要呢?我发两例子吧...
下面这个...我问过别人.被告之这个动态注册事件,泄漏了两个动作....
这个时候我以为只要是用了动态注册事件,就要把该事件中所有的局部触发和动作删除掉?
想知道的是动态注册事件.是不是每注册一次.就会申请一次新的内存?再注册一次.再申请新的内存?
这样理解对吗?
例1:
[jass]
function t1a takes nothing returns nothing
call DestroyEffect( AddSpecialEffectTarget("Abilities\\\\Weapons\\\\FragDriller\\\\FragDriller.mdl", GetTriggerUnit(), "overhead") )
call DestroyEffect( AddSpecialEffectTarget("Abilities\\\\Spells\\\\Human\\\\Feedback\\\\ArcaneTowerAttack.mdl", GetAttacker(), "overhead") )
endfunction
function t2a takes nothing returns nothing
call DestroyEffect( AddSpecialEffectTarget("Units\\\\Demon\\\\Infernal\\\\InfernalBirth.mdl", GetAttacker(), "overhead") )
endfunction
//===========================================================================
function InitTrig____________________001 takes nothing returns nothing
local trigger t1
local trigger t2
set t1 = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t1, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddAction(t1, function t1a)
set t2 = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( t2, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddAction(t2, function t2a)
set t1 = null
set t2 = null
endfunction
[/jass]
例2: 这个注册事件.是只用了一个 局部 触发....我比较迷茫的是.这样算不算是动态注册事件...如果不是的话...那这算是什么呢? 如果是的话...这个为何不用排泄呢..........擦汗.
希望指点..
(以下只是截取.如有需要.请移步http://bbs.islga.org/read-htm-tid-53016.html查到)
[jass]
function InitNoCD takes nothing returns nothing
local trigger tri = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ( tri, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( tri, Condition( function ClearCDCond ) )
set tri = null
endfunction
[/jass] |
|