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开源游戏引擎:游戏起源,皆因有我!!!

 


《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇05:二段跳》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. The 9th Zhejiang Provincial Collegiate Programming Contest->Problem :K-Yet Another Story of Rock-pap

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3610 题意:一对恋人受到fff团惩罚,需要比剪刀石头布,谁输谁死,出一样都 ...

  2. MySQL性能优化的21个最佳实践

    http://www.searchdatabase.com.cn/showcontent_38045.htm MySQL性能优化的21个最佳实践 1. 为查询缓存优化你的查询 大多数的MySQL服务器 ...

  3. POJ3204+DInic+maxflow

    Dinic+maxflow题意:找这样一种边的个数,就是增加该边的容量,可以使得最大流变大思路:求maxflow,再枚举流量为0的边,增加容量,看是否能找到增广路径. /* Dinic+maxflow ...

  4. poj 2888 Magic Bracelet

    经典的有限制条件的Burnside计数+矩阵乘法!!! 对于这种限制条件的情况我们可以通过矩阵连乘得到,先初始化矩阵array[i][j]为1.如果颜色a和颜色b不能涂在相邻的珠子, 那么array[ ...

  5. Java 另一道构造器与构造器重载的题目

    题目: 请写出以下程序的输出结果 public class ConstructorTest2 { public static void main(String[] args) { new B(&quo ...

  6. Linux内核中的中断

    http://blog.csdn.net/weiqing1981127/article/details/8298585 中断处理程序是被内核调用来响应中断的,它运行在中断上下文,中断处理程序是上半部, ...

  7. MVC @Html.DropDownListFor 默认值

    今天在做MVC 的 @Html.DropDownListFor  的时候,本来数据库中读取到的值是HK,但是 @Html.DropDownListFor的起始默认值始终是“请选择国家”,搞了一个下午, ...

  8. SPRING IN ACTION 第4版笔记-第九章Securing web applications-003-把用户数据存在数据库

    一. 1.It’s quite common for user data to be stored in a relational database, accessed via JDBC . To c ...

  9. C#操作xml文档,cuid,dategridview显示数据

    界面 //所有的数据全部在集合中             //dgv控件绑定List集合,List集合中有User类的对象,对象里有属性,把属性绑定到没列的数据上             dgv.Da ...

  10. Ubuntu12.04 VMware Tools的安装

    Ubuntu12.04VMware Tools的安装 备注:xp+VMware.Workstation.v8.0.3 1.      VMware Tools的概述 VMware Tools是VMwa ...