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; |
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- Spring+MyBatis实践—MyBatis数据库访问
关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...
- 每次都觉得很神奇的JS
匿名,函数对象... var staff = [ {name: 'abruzzi', age: 24}, {name: 'bajmine', age: 26}, {name: 'chris', age ...
- 李洪强漫谈iOS开发[C语言-013]-常量
// // main.m // 09 - 常量 // // Created by 李洪强 on 16/7/17. // Copyright © 2016年 李洪强. All rights re ...
- 安装 ArcGIS Runtime SDK for Android
ArcGIS for Android 开发:Android 平台搭建 - liyong20080101的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyong ...
- HDU1875——畅通工程再续(最小生成树:Kruskal算法)
畅通工程再续 Description相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当 ...
- R语言学习笔记:向量化
R语言最强大的方面之一就是函数的向量化,这些函数可以直接对向量的每个元素进行操作.例如: 对每个元素进行开方 > v<-c(4,3,8,16,7.3) > v [1] 4.0 3 ...
- libevent入门教程
首先给出官方文档吧: http://libevent.org ,首页有个Programming with Libevent,里面是一节一节的介绍libevent,但是感觉信息量太大了,而且还是英文的- ...
- node.js模块之Buffer模块
http://nodejs.org/api/buffer.html Pure JavaScript is Unicode friendly but not nice to binary data. W ...
- 深入理解ob_flush和flush的区别
ob_flush/flush在手册中的描述, 都是刷新输出缓冲区, 并且还需要配套使用, 所以会导致很多人迷惑… 其实, 他们俩的操作对象不同, 有些情况下, flush根本不做什么事情.. ob_* ...
- while ((ch = getchar()) != EOF)中ch定义为char还是int型?cin、scanf等如何结束键盘输入
2013-07-09 18:55:42 EOF是文件的结束符,具体可以作为文本文件的结束符,也可以作为键盘输入char类型数据时的结束符.对于不同的系统,EOF的定义可能不同,一般定义为-1.因为ch ...