• 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中通知对应的反应。

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

        

         

         

  • 相关阅读:
    安装VMware Tools
    屏幕分辨率
    常用的几种进程通信方式的比较(转载)
    情绪低落
    mvc中validateinput属性在asp.net4中不工作
    读取 XML 数据时,超出最大字符串内容长度配额 (8192)
    excel检测到xls 是sylk文件 解决
    简化自己的一个工程,共享给大家:Silverlight 做的Link Map
    (转)WCF/Silverlight 相关总结
    DOM节点方法介绍
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/2765338.html
Copyright © 2020-2023  润新知