Chicken的代码解剖:5 UDN的interface

Posted on 2012-11-11 17:40  neocsl  阅读(297)  评论(0编辑  收藏  举报

  接口interface的知识在这一部分研究中尤为重要,因为接口实现了鸡链系统。对了 可能还牵扯到一些积分系统,让我们看看这一章中的内容。

接口可以被当做一种类来看待,他声明了子类中继承和要实现的内容。我们就以UDN中的接口文章来讲解这一章。

interface IWeapon;

const FireRate=0.05;
const FireCounter=3;

function bool PrimaryFire(float Rate);
function bool SecondFire(int Counter);

  上边是一个武器类的接口,所有的武器类都得实现这个接口。里面有常量和函数,他约束了武器的一般行为。

pistol,机枪MachineGun,还是狙击SniperRifle。这些枪都有开火的一般行为和一些法定频率等属性。

关于接口的实现如下:

class Pistol extends UTWeapon implements(IWeapon);

function bool PrimaryFire(flaot Rate)
{
     if(Rate>class'IWeapon'.const.FireRate)
      return true;

      return false;
}

function bool SecondFire(int Counter)
{
    if(Counter<class'IWeapon'.const.FireCounter)
       return true;

       return false;
}

可以看到上边实现了接口中的内容,而且不用再重新定义常量。
      这样做有一个好处,当我们的接口函数在实现的时候如果出错,编译器将会很快的告诉我们是接口实现出了问题。接口能让我们把一些类的一般属性都实现了,尽管每个类关于接口的函数实现都有各自的功能。但对外都是一致的,这就像USB一样。打印机,键盘,鼠标。

     当然,接口也是可以继承的,前面的狙击枪SniperRifle。

Interface IZoomWeapon extends IWeapon;

function bool ZoomedFire(flaot Rate,int FOV);

    我们看一看狙击枪是怎么实现继承接口的。

class SniperRifle extends UTWeapon implements(IZoomedWeapon);

function bool PrimaryFire(float Rate)
{
     if(Rate>class'IWeapon'.const.FireRate)
     Rate=class'IWeapon'.const.FireRate;

     return false;
}


function bool SecondFire(int FireCount)
{
     if(Rate>class'IWeapon'.const.FireCount)
     Counter=class'IWeapon'.const.FireCount;

     return false;
}

function bool ZoomedFire(float Rate,int FOV)
{
    return false;
}

      每个类都要实现接口中的声明函数。

  一个UDN中提到的很好问题,也许你觉得接口就是一种类,为什么多此一举?其实接口有自己的长处,当你在做子类的时候,你将一个函数拼错,编译器可能不会出错。但接口可以防止这种事件的发声。

  尽管这样,接口还是很抽象,我们接下来学习Chicken中的接口。