zoukankan      html  css  js  c++  java
  • 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中通知对应的反应。

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

        

         

         

  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/2765338.html
Copyright © 2011-2022 走看看