代理不仅是说说道理,更重要的是实际运用。否则有很多细节与零碎容易让人犯浑,下面就学习一下代理的使用。
1.代理的举例使用,上一节已经讲过代理的声明,下面讲一下他的赋值使用:
delegate Smart() { `log("I'm a smart gy!"); } function Stupid() { `log("I'm a asshole!"); } function MakeAChocice() { Smart=Stupid; //为代理函数重新赋值 Smart(); //赋了值然后执行它,结果是I'm a asshole! Smart=none; Smart(); //结果是I'm a smart gy! }
上述步骤说明了一个道理,近墨者黑,聪明人保持独立人格Smart=none依然会强大,而跟笨蛋在一起就会受其思维影响变得愚蠢。勒庞的《乌合之众》很好的做出了解释。扯远了;)
代理同样可以当变量一样被检测,上面的函数如果写成这样:
simulated function PostBeginPlay() { Smart=Stupid; if(Smart==Stupid) { `log("Yes We Are All Stupid"); } }
2.实际运用
以前说到SetTimer(10,true,'DoIt');
function DoIt(){...}
而其实SetTimer(10,true);后面不添加函数将会进入function Timer(){...}中,这是十分便利的。
写一个Mutator,他继承自info用于修改玩家信息和一些全局信息
class MyMutator extends Mutator; simulated function PostBeginPlay() { SetTimer(60,true); } delegate RandomEvent(); function Timer() { switch(Random(3)) { case 0: RandomEvent=killRobert; break; case 0: RandomEvent=killZombie; break; case 0: RandomEvent=killAll; break; } RandomEvent(); //执行函数,前边只不过赋值,这才是执行逻辑 } function KillRobert() { ... } function KillZombie() { ... } function KillAll() { ... }