|
楼主 |
发表于 2008-1-27 01:27:31
|
显示全部楼层
引用第6楼eff于2008-01-20 19:42发表的 :
function Trig_Sleep_Action takes nothing returns nothing
call UnitDamageTargetBJ( GetEventDamageSource(), GetTriggerUnit(), 50.00,ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
call DestroyTrigger(GetTriggeringTrigger()) 《------这里是泄漏点之一
endfunction
....... 诶,事实只能说明你的JASS有待加强,注册动态事件你还是不太了解。问题我已经解决了,和你们说的一点关系都没有,只是因为我头脑发热,把销毁触发器写在造成伤害之后,当我对目标单位制造伤害时,这个触发器又被触发了一次,如此反复造成了死循环。
正确的写法是这样的,你们也理解一下代码吧,有好处的
[jass]
function Trig_Sleep_Action takes nothing returns nothing
call DestroyTrigger(GetTriggeringTrigger())
call UnitDamageTargetBJ( GetEventDamageSource(), GetTriggerUnit(), 50.00,ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL )
endfunction
function Trig_shuimianbegin_Actions takes nothing returns nothing
local trigger trig=CreateTrigger()
local unit target=GetSpellTargetUnit()
call TriggerRegisterUnitEvent( trig,target,EVENT_UNIT_DAMAGED)
call TriggerAddCondition(trig,Condition(function Trig_Sleep_Action))
endfunction
[/jass]
问题是在触发器还没有把自己删除掉,而触发器的动作有触发了它自己。
这里我想说一下TRIGGER的实现过程
当TRIGGER被引发时,系统就会调用TRIGGER的条件函数判断条件是否成立。如果成立则调用TRIGGER的动作函数。把动作和条件一起写的好处是在TRIGGER调用条件函数时,附带的把动作也执行了,因为不返回值,在JASS的机制中这也就是FALSE,(当然你也可以给定一个FALSE的返回值)系统就不会再去执行TRIGGER的动作函数。 |
|