zoukankan      html  css  js  c++  java
  • 9:《地牢守卫者》代码分析:AntManaToken

      这就是传说中的金币,金币前后被Controller,和Player分别调用。

    在controller中出现在以下地方:

    function CollectManaToken(AntManaToken token)

    {

      token.Collected(AntPawn(pawn));

      AddManaPower(token.TokenPower);
    }

    显而易见该函数一方面是通知token自己已经被使用了,另一方面是加入到controller的power中。

    function AddManaPower(float  tokenPower)

    {            //ManaPower是controller的属性

      ManaPower=FClamp(ManaPower+tokenPower,0,MaxManaPower);

    }

      接下来是AntPawn中有关AntManaToken的函数了:

    实际上是该函数调用了Controller的CollectManaToken函数,也就是说Pawn启发了AntManaToken的交互事件发生,事实上也只有pawn和AntManaToken的距离能做出更好的系统。

    function CheckForManaTokens()

    {

      local AntManaToken token;

      foreach OverLappingActors(class'AntManaToken',token,ManaTokenRadius)

      {

        token.AttractTo(self); //将Attractor指向pawn,紧接着tick函数会将其吸向pawn

        if(VSize(token.location-location)<ManaTokenCollectRadius)

        AntController(controller).CollectManaToken(token);
      }
    }

    现在进入AntManaToken:发现AntManaToken有以下变量

    var AntEmitterSpawnable CollectedEmitterTemplate;    //收集到时应该有一个粒子效果

    var AntPawn MyAttractor;          //自己的吸引者

    var bool WasCollected;           //被收集的标志位,以备用来销毁


    发现controller的token.Collected(AntPawn(pawn));

    function Collected(AntPawn pawn)

    {

      WasCollected=true;

      Spawn(CollectedEmitter.class,,Location,rotation,CollectedEmitter,true);

      LifeSpan=-1;

    }

      标志位决定了token的销毁

      function Destroyed()

    {

      if(WasCollected)

      super.Destroyed();
    }

      看到了Pawn中还有一个地方调用了token.attractTo(self)

    function AttractTo(AntPawn attractor)

    {

      MyAttractor=attractor;

    }


      有一个Tick函数检查MyAttractor

      event Tick(float DeltaTime)

    {

      super.Tick(DeltaTime);

      if(MyAttractor!=none)

      {

        staticMeshComponent.AddForce(Myattractor.ManaTokenAttractorForce*normal(MyAttractor.location-location));
      }

      
    }

    至此ManaToken结束,下一节研究Emitter

  • 相关阅读:
    让PHP程序永远在后台运行
    discuz3.2x增加邮箱验证功能
    UML类图几种关系的总结
    UML中九种图的理解
    什么是UML类图
    仿了么项目,商品详情页开发
    仿饿了么项目,右侧商品组件动画,以及和购物车组件的联动效果,小球掉落效果
    外卖项目底部购物车组件编写
    仿饿了么外卖项目better-scroll插件的实战
    vue项目如何在手机上测试
  • 原文地址:https://www.cnblogs.com/NEOCSL/p/2372523.html
Copyright © 2011-2022 走看看