做个Scratch的跳跃小游戏
2020-06-30
角色的跳躍是很多游戏中的基础动作,下面我们一起来研究怎么做出一个比较完善的跳跃小游戏来。
1. 简单跳跃
跳跃的方法有很多种,最简单的是匀速上下移动,程序如图2、图3。
以上两种方法,角色都是在原位置上下匀速移动,在起点和最高点不变的情况下,可以修改积木块中的滑行时间或者重复执行次数来改变其运行速度。这两段程序非常简单,但有一些问题:一是跳跃是匀速的,不符合生活常识和物理规律——越接近最高点速度越慢;二是起点和落点是同一水平面,不适合地面高低不平的情况。
2. 受重力影响的跳跃
我们生活中感受到跳跃是会受到重力影响的。起跳时最快上升到最高点时速度为零下降时加速,为了游戏手感考虑下降速度一般有一个最高值。为了实现这种效果我们引入变量“垂直速度”(设为15),按下起跳键(空格)时做循环:Y坐标每次增加一个垂直速度,垂直速度不断减1,这样Y坐标将从增加15、14、13……到减少-1、-2、-3……-8。这样角色将快速上升在接近最高点开始减速,再加速下落,由于还没有设置地面侦测所以会一直下落直到屏幕边缘。
为了避免角色的下降速度太快穿越地面影响地面侦测,我们对垂直速度的最小值进行了限制为-8。
如图就是常见的跳跃方法,根据需要的跳跃高度调整垂直速度,做成自制积木便于后续编辑。如图4
3. 用坐标侦测地面
完成跳跃的基本设置后接下来我们介绍几种侦测地面的方法。如果没有地面侦测,角色在重力效果下会持续下落。我们设置一个基准面Y坐标等于-160。当角色的Y坐标高于-160时,它的垂直移动速度可以一直减少。当角色的Y坐标小于-160时我们认为角色跌落到陷阱中了游戏失败。设置垂直速度为0,并结束游戏。用坐标的方法侦测地面只能适合地面是同一水平线,不适合用于阶梯地形。如图5
4. 用颜色判定地面
我们可以通过对地面颜色的侦测作为判断条件。当角色碰触到某种颜色时我们认为它碰到了地面,此时让其停止。相比于坐标判断颜色判定,地面可以高低不平但作为地面的颜色必须统一,而且起跳后头部碰触地面下方时可能会遇到侵入地板或从下方向上穿透地板的Bug。如图6
5. 地面侦测小技巧
我们也可以用角色来判断地面,之前的程序由于有重力效果的影响本应静止站在地上的角色会在地面上不停抖动。这里告诉你一个小技巧,角色在碰到地板后速度归0,之后再回升1个坐标离开地面。这样虽然视觉看起来角色站在地面上实际上是悬浮在地面上的,这样就不会重复进行地面判断了。
为了确定按空格时角色是在地面上起跳,要先将角色Y坐标-1,进行地面判断,如果碰到了地面才执行起跳。如图7、图8
6. 二段跳
不少游戏里面都有二段跳,我们对程序稍微修改就可以实现在空中跳跃次数的限定。添加次数变量,每次跳跃增加一次计数,只有次数小于等于2的情况下才起跳,落回地面后次数归零。还需要在添加一个等待空格键弹起的判断,这样才能正确地计数。如图9
7. 左右移动和障碍判断
角色左右移动就比较简单,按左键X坐标增加X速度,按右键X坐标减少X速度。通过颜色或角色判断遇到阻碍物时X坐标退回X速度。为了保证上下运动和左右移动互不干扰,设定两个点击绿旗循环这样操作手感更好。如图10、图11