(一)实现多段跳(airJump)
刚刚回到学校,整个人都不好了
Forward
一个横版过关游戏,相比于单纯的固定跳跃来说,多段跳能更好的让玩家自由、细致的操作。实现N段跳的过程并不太难,然而在思考的过程中,还是遇到了一些问题。下面是我对这个方法实现的思考过程
。
变量说明
|
|
实现基本跳跃
玩家的默认操作,与左右行走相同,都是放在update函数(即时更新函数)里的
特别说明
和东方类游戏的”shift”集中状态一样,所有的操作都是布尔状态量!
例如向左行走,就是打开了velocity.x=-100的开关,而不是触发一次position.x-=100,哪怕位移间隔再小也不行。一个原因是行为的流畅度,第二个原因是计算的需要。
跳跃也是如此,cursors.up.isDown是按下上箭头这个状态,对于我们后续的计算不利,所以我们用原生的事件方法,把跳跃变成事件,这样对于一次按键只会触发一次事件,直到松开按键。
实现二段跳
定义变量
|
|
并删去update()中原有的跳跃相关代码
phaser的监听方法
|
|
jump函数
|
|
debug
这种跳跃方法在平地上测试OK,在平台间测试有bug。
bug原因:由于测试时通过按下Jump来判断位置重置,因此从平台上落下时无法跳跃。
原本是为了性能从而把判断放在jump函数中,在需要跳跃时再去判断当前的位置,因为游戏运行时卡顿严重。后来发现开着调试窗口的原因。
解决了以上问题以后,把判断放在update中时,问题解决。
实现二段跳·改
debug
有一定游戏经验的同学都知道,从平台上落下的时候只能触发二次airJump,而此函数在落下时保留了两段跳。从而导致下落二段跳是玩家能跳的非常远。于是我们把update函数中的
更正为
用if语句来解释就是
如果是高空落下的情况如果airjump次数为最大值,则让次数减少1。否则保持原来的次数
实现多段跳
按照之前的思路,能够较容易地实现并优化我们的代码。
定义变量
|
|
update函数更新
|
|
jump函数更新
|
|
具体跳跃高度你可以用与次数有关的线性方程来决定,也可以像我一样使用固定高度。
END?
说了这么多,然而这只是一个临时替代的方案,最终还是要用状态量去实现多段跳跃。这对于后续维护
非常重要。