• 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇05:二段跳》


    5.二段跳

    二段跳概述:

    基本跑酷游戏的框架搭建完毕,开发者会根据开发的游戏特性,增设一些额外功能,使游戏具有可玩性性和画面感。下面我们以角色的二段跳为例,来了解在跑酷游戏中增设其它功能的流程。二段跳的设定,不仅增加游戏的华丽感并且可以通过二段跳游戏的道路和关卡转换。

    二段跳原理:

    如图5-1所示。


    图5-1

    实现方法:

    步骤1:

    二段跳可以参考SecondJumpMgr.cs 文件,表现层通过逻辑中二段跳不同的状态,来播不同的动画。首先把二段跳拆下述的分成几种线性状态, 如下所示。

    1 public enum Status
    2 {
    3  Lifting,
    4  PreRush,
    5  Rushing,
    6  CD,
    7  Ready,
    8 }

    步骤2:

    在逻辑层的Player.cs文件中,当收到操作指令向上跳之后,又收到一次向上跳,会尝试进行二段跳。

    01 public override bool Jump()
    02 {
    03  bool success = false;
    04  if (PlayerDataMgr.Singleton.IsOnGround == true )
    05  {
    06   DoJump(); 
    07   _callback.PlaySound("asset:Media/Sound/Jump1.mp3");
    08   PlayerDataMgr.Singleton._isBeginJump = true;
    09   success = true;
    10  }           
    11  else// 在空中则尝试二段跳
    12  {   
    13   if(SecondJumpMgr.Singleton.CanSecondJump()&& (PlayerDataMgr.Singleton.YSpeed > 0.0f || GetDisFromGround() > 1.2f))
    14   {
    15    SecondJumpMgr.Singleton.Begin(GetDisFromGround());
    16    success = true;
    17    _callback.OnSecondJump();
    18    _callback.PlaySound("asset:Media/Sound/SecondJump.mp3")
    19   }
    20  }
    21  _isPlayJumpEndSound = true ;
    22  return success;
    23 }

    步骤3:

    成功的情况下,就会调用SecondJumpMgr里面的Begin函数开始二段跳。

    01 public void Begin (float disFromGround)
    02 {
    03  _ySpeedWhenLifting = (StaticData.SecondJump_High - disFromGround) / StaticData.SecondJump_LiftTime;
    04  SecondJumpCostEnergy ();
    05  _status = Status.Lifting;
    06  _stageProcessTime = 0.0f;
    07  _speedUpProcessTime = 0.0f;
    08  }
    09 //LogicMgr的Tick里会对二段跳进行单独的Tick,二段跳的Tick如下:
    10 public void Tick (float elapse)
    11 {
    12  Tick_RenewEnergy(elapse);
    13  Tikc_SecondJumpLogic(elapse);
    14  Tick_PlayParticle (elapse);
    15  Tick_SpeedUp(elapse);
    16 }
    17 //其中Tikc_SecondJumpLogic(elapse)会针对二段跳的状态变换进行逻辑判定:
    18 void Tikc_SecondJumpLogic (float elapse)
    19 {
    20  if (_status == Status.Ready || _status == Status.CD)
    21  {return;}
    22  _stageProcessTime += elapse;
    23  if (_status == Status.Lifting)
    24  {
    25   if (_stageProcessTime > StaticData.SecondJump_LiftTime)
    26   {
    27    _status = Status.PreRush;
    28    _stageProcessTime = 0.0f;}
    29   }
    30   else if (_status == Status.PreRush)
    31   {
    32    if (_stageProcessTime > StaticData.SecondJump_PreRushTime)
    33    {
    34     _status = Status.Rushing;                
    35     _stageProcessTime = 0.0f;
    36    }
    37   }
    38   else if (_status == Status.Rushing)
    39   {
    40    if (_stageProcessTime > StaticData.SecondJump_RushTime)
    41    {
    42     _status = Status.CD;                 
    43     _stageProcessTime = 0.0f;
    44    }
    45   }
    46  }
    47 }



    引擎官方网站:http://www.genesis-3d.com.cn/

    官方论坛:http://bbs.9tech.cn/genesis-3d/

    官方千人大群:59113309   135439306

    YY频道-游戏开发大讲堂(完全免费,定期开课):51735288 

    Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!

     


  • 相关阅读:
    String类可以被继承吗?我们来聊聊final关键字!
    微信小程序中使用阿里ICON图标
    兼容iphone x刘海的正确姿势
    解决ios下部分手机在input设置为readonly属性时,依然显示光标
    react jsx 中使用 switch case 示例
    react 中使用 JsBarcode 显示条形码
    解决IDEA输入法输入中文候选框不显示问题
    svn提交代码失败提示清理(清理失败并且报错信息乱码解决办法)
    css笔记
    修改Mysql数据库的字符集
  • 原文地址:https://www.cnblogs.com/G-3D/p/3515208.html
Copyright © 2020-2023  润新知