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. API断点大全

    1.限制程序功能函数 EnableMenuItem 允许.禁止或变灰指定的菜单条目EnableWindow 允许或禁止鼠标和键盘控制指定窗口和条目(禁止时菜单变灰) 2.对话框函数 CreateDia ...

  2. ACM题集以及各种总结大全!

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  3. win8.1下使用vmware workstation 来编译ffmpeg

    先吐槽下,T440预装的win8.1 采用 UEFI+GPT分区导致 无法使用传统的EasyBCD来达到win+ubuntu双系统效果, 尝试了2天全部失败,等以后有时间了 买块U盘再干掉win8 现 ...

  4. 【BZOJ 1046】 1046: [HAOI2007]上升序列

    1046: [HAOI2007]上升序列 Description 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < ...

  5. android 安全需要关注

    1.通过签名校验保护,能有效避免应用被二次打包,杜绝盗版应用的产生2.对内存数据进行变换处理和动态跟踪,有效防止数据被获取和修改3.对代码进行加密压缩,可防止破解者还原真实代码逻辑,避免被复制4.多重 ...

  6. 一个简单的Android小实例

    原文:一个简单的Android小实例 一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台   3.安装J ...

  7. MyBatis的动态SQL操作--插入

    需求:向数据库中插入一条数据 //id,name,sal非空,三个字段都插入 insert into student(id,name,sal) values (?,?,?) //id,name非空,只 ...

  8. Android ScrollView+ViewPager+PullToRefreshListView

    想达到此界面的风格 然后ViewPage里面第一个Fragment是一个瀑布流 这个瀑布流要有加载跟多 在ScrollView中,嵌套ViewPager,在ViewPager的每页使用Fragment ...

  9. python函数--传参

    一.位置参数 二.关键字参数 三.默认参数 四.任意数量的位置参数: 1. *x 2. 传入的多个参数,最终合并成一个元组 3. 之后的参数必须用关键字参数 五.任意数量的关键字参数 1. **x 2 ...

  10. Complete The Pattern #2

    Complete The Pattern #2 Description: Task: You have to write a function pattern which creates the fo ...