找回密码
 点一下
查看: 2203|回复: 2

关于删除触发器的问题...

[复制链接]
发表于 2011-4-19 03:41:35 | 显示全部楼层 |阅读模式

http://bbs.islga.org/read-htm-tid-28353.html
这个帖子里面看到 自定义代码: set udg_t=CreateTrigger()
这样生成一个触发以后,如果要删除的话.那么,还需要再单独清除此触发的动作....

由此产生一个疑问,过去看到有人说如果一个触发如果仅仅使用一次的话.最好在使用以后删除掉.如果是这样的话.那么删除的时候.会不会赞成该触发的动作泄漏呢?

另外就是动态注册事件..有些晕呢.
就是动态注册事件.什么情况下需要排泄?什么时候又不需要呢?
在多次重复注册的时候需要? 只有一次的时候不需要?


希望高手赐教.谢谢了.
发表于 2011-4-19 12:32:26 | 显示全部楼层
删除触发的时候先把动作清除掉就好了啊,而且那一楼说的并不是set udg_t=CreateTrigger() 创建的触发有问题,而是call TriggerAddCondition(udg_t,Condition(function IsUnitEnemyEx))之后如果不清除会泄露,lz的理解本身就出现了偏差

另外,排泄跟动态注册有啥直接关系?排泄指的是排除内存泄漏的一系列行为,并不特指删除点啊删除触发之类,只要有可能会有内存泄漏就要排泄,和动态注册啊多次注册啊注册一次啊什么的没太大关系
回复

使用道具 举报

 楼主| 发表于 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]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-4 01:15 , Processed in 0.076914 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表