Chicken的代码解剖:5 Chicken中的两个接口及其相关

       Chicken中有两个接口,一个是Interface_Dragger一个是Interface_DraggableItem。前者在Controller中实现。后者在pawn中实现,是所有能被拉动的东西,两种鸡和狐狸。

Interface Interface_Dragger;

function DropGrabbedActor(optional int DraggedIndex);

defaultproperties
{
}

    函数声明是放下捡起的东西。
    

    下面看一看Interface_DraggableItem.看看他们的函数声明:

//被拖拽
function NotifyGrabbed(Controller Grabber);

//被释放
function NotifyReleased(Controller Grabber);

//被挪
function NotifyCarried(Controller Grabber);

//被放进体积
function NotifyPlacedInPen(PenVolume enteredPen);
//从体积中剔除
function NotifyRemovedFromPen(PenVolume enteredPen);

//在SpawnManager和每个pawn或是Controller得声明被处理的函数
function HandleCapture(ChickenSpawnManager SpawnManager,bool bPlayCaptureSound,bool bPlayCaptureFX,optional int BonusMult=1);

//没有被抓住是怎么一种情况呢?
function HandleFailedCapture(ChickenSpawnManager SpawnManager);

//处理被狐狸带走
function HandleStolen(Controller Grabber);

//更新被拖拽
function UpdateDragLocation(vector NewDrageLocation,Actor HitActor,optional bool bSetLocation,optional rotator newRotation);

function Interface_DraggableItem AllowDragging(Controller attemptedGrabber);

function bool IsChainable(Actor Chainer);

function float GetDraggableRadius();

defaultproperties
{
}

  我们看一看在哪些类中都对该接口进行了实现。

  ChickenAIController                implements(Interface_Dragger);                  实现狐狸叼鸡

  ChickenPawn                         implements(Interface_DraggableItem);         能被拖拽

      ChickenPlayerController          implements(Iterface_Dragger);                    在controller中实现Interface_Dragger.

2.先从实现Interface_DraggableItem的类看,因为后面会看到该接口的DropGrabbedActor函数会实现Interface_DraggableItem的函数。

  看看ChickenPawn中的接口实现部分。有变量var Interface_Dragger currentHolder;

  我们看看在ChickenPawn中Intergace_DraggableItem的实现。有三个大动作将CurrentHolder=InterfaceDragger(Grabber),第二个动作设置动画,第三个动作进入AIController中进入Grabbed状态,该状态只是改变了碰撞和物理设置。我将NotifyGrabbed函数搜索了一下,可能最重要的调用地方在DoDeferredTouch的函数中,该函数用来执行触摸设置。在第四步里面我就进行这个函数的相关函数研究。这也是最有内容的地方。

3.有一种模式我得谈一谈,pawn是反映在世界中的物理事物,而controller可以看做精神事物,物理事物在世界中被反馈,然后让神经中枢controller来处理对应的反应。

  所以,接口函数在pawn中实现,然后在controller中通知对应的反应。

  前期的工作做完了,让我们看一看触屏的实现方式。

    

     

     

原文地址:https://www.cnblogs.com/NEOCSL/p/2765338.html