代理:::走的更远一点实例

Posted on 2013-03-04 10:41  neocsl  阅读(179)  评论(0编辑  收藏  举报

  代理不仅是说说道理,更重要的是实际运用。否则有很多细节与零碎容易让人犯浑,下面就学习一下代理的使用。

  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()
{
...
}