大家好,我是Tiveone,现在以及将来我将为大家讲解一些 WE 的进阶技术
这次为大家讲的是动态注册事件
相信大家有遇见过需要注册大量单位的事件吧!
比如:我要使地图上的所有单位的生命值在小于或等于50的时候,使其无敌。
可解决办法之一就是:将所有单位都在编辑器中创建好,并注册事件。
这方法固然好,却不怎么现实,首先其弊病就是导致地图加载量变大,增加读取时间。并且还会使触发器注册多余的事件。
而另一个方法就是动态注册事件
动态注册事件的好处:没有上述方法的弊病,并且最大限度减少内存占用
废话不多说,直接说实现方法。
事例还是上面所说的那个
首先,我们为写一个模板供需要注册时间的单位使用
//当触发注册的事件时调用的函数
function OnUnitAmort takes nothing returns nothing
//设置触发单位为无敌
call SetUnitInvulnerable( GetTriggerUnit(), true )
//破坏这个触发器,即下面的RegisterUnitAmortEvent所创建的触发器
//这样就不会导致该触发被多次调用,并且还能清理该触发所占用的内存
call DestroyTrigger(GetTriggeringTrigger())
endfunction
//注册模板
function RegisterUnitAmortEvent takes unit witchUnit returns nothing
//创建一个触发器
local trigger rTrg = CreateTrigger()
//为创建的触发器注册事件:当单位witchUnit的生命值小于或等于50的时触发事件
call TriggerRegisterUnitLifeEvent( rTrg , witchUnit, LESS_THAN_OR_EQUAL, 50 )
//注册触发器事件响应后所调用的函数
call TriggerAddAction( rTrg, function OnUnitAmort )
endfunction
模板就完成了,下面我们只需要在游戏中的时候调用RegisterUnitAmortEvent函数注册单位就可以了。
当然,动态注册事件的功能不只于此,只要是需要注册大量重复事件的触发都可以应用,具体就要看个人了。
附件为演示
[ 本帖最后由 Tiveone 于 2006-1-27 16:56 编辑 ]
附件: [动态注册事件演示地图] DynamicEvent.rar (2006-1-27 16:43, 17.37 K)责任编辑:admin
进入论坛参与针对本文章的讨论
