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; |
10 |
public void Tick ( float elapse) |
12 |
Tick_RenewEnergy(elapse); |
13 |
Tikc_SecondJumpLogic(elapse); |
14 |
Tick_PlayParticle (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; |