5.二段跳
二段跳概述:
基本跑酷游戏的框架搭建完毕,开发者会根据开发的游戏特性,增设一些额外功能,使游戏具有可玩性性和画面感。下面我们以角色的二段跳为例,来了解在跑酷游戏中增设其它功能的流程。二段跳的设定,不仅增加游戏的华丽感并且可以通过二段跳游戏的道路和关卡转换。
二段跳原理:
如图5-1所示。
图5-1
实现方法:
步骤1:
二段跳可以参考SecondJumpMgr.cs 文件,表现层通过逻辑中二段跳不同的状态,来播不同的动画。首先把二段跳拆下述的分成几种线性状态, 如下所示。
步骤2:
在逻辑层的Player.cs文件中,当收到操作指令向上跳之后,又收到一次向上跳,会尝试进行二段跳。
01 | public override bool Jump() |
04 | if (PlayerDataMgr.Singleton.IsOnGround == true ) |
07 | _callback.PlaySound( "asset:Media/Sound/Jump1.mp3" ); |
08 | PlayerDataMgr.Singleton._isBeginJump = true ; |
13 | if (SecondJumpMgr.Singleton.CanSecondJump()&& (PlayerDataMgr.Singleton.YSpeed > 0.0f || GetDisFromGround() > 1.2f)) |
15 | SecondJumpMgr.Singleton.Begin(GetDisFromGround()); |
17 | _callback.OnSecondJump(); |
18 | _callback.PlaySound( "asset:Media/Sound/SecondJump.mp3" ) |
21 | _isPlayJumpEndSound = true ; |
步骤3:
成功的情况下,就会调用SecondJumpMgr里面的Begin函数开始二段跳。
01 | public void Begin ( float disFromGround) |
03 | _ySpeedWhenLifting = (StaticData.SecondJump_High - disFromGround) / StaticData.SecondJump_LiftTime; |
04 | SecondJumpCostEnergy (); |
05 | _status = Status.Lifting; |
06 | _stageProcessTime = 0.0f; |
07 | _speedUpProcessTime = 0.0f; |
09 | //LogicMgr的Tick里会对二段跳进行单独的Tick,二段跳的Tick如下: |
10 | public void Tick ( float elapse) |
12 | Tick_RenewEnergy(elapse); |
13 | Tikc_SecondJumpLogic(elapse); |
14 | Tick_PlayParticle (elapse); |
17 | //其中Tikc_SecondJumpLogic(elapse)会针对二段跳的状态变换进行逻辑判定: |
18 | void Tikc_SecondJumpLogic ( float elapse) |
20 | if (_status == Status.Ready || _status == Status.CD) |
22 | _stageProcessTime += elapse; |
23 | if (_status == Status.Lifting) |
25 | if (_stageProcessTime > StaticData.SecondJump_LiftTime) |
27 | _status = Status.PreRush; |
28 | _stageProcessTime = 0.0f;} |
30 | else if (_status == Status.PreRush) |
32 | if (_stageProcessTime > StaticData.SecondJump_PreRushTime) |
34 | _status = Status.Rushing; |
35 | _stageProcessTime = 0.0f; |
38 | else if (_status == Status.Rushing) |
40 | if (_stageProcessTime > StaticData.SecondJump_RushTime) |
43 | _stageProcessTime = 0.0f; |