Scratch跳跃系列教程(四):精准着陆
作者:小虎鲸Scratch资源站
按上方向键预览效果
创建跳跃的基础
创建跳跃高度变量
跳跃高度由变量“跳跃高度Y”来管理,而不是直接使用Y坐标。
持续添加跳跃高度Y到Y坐标
添加当按下上方向键
按向上键将跳跃高度 Y设为15
创建一个名为“重力”的变量
现在,当按上方向键时,角色会持续上升。为了能够让角色掉下来,我们需要添加一个向下的重力效果。
初始化重力变量
点击绿旗后,我们将重力变量设为-1.5。
通过重力不断使角色降落
在重复执行中,将跳跃高度Y增加重力,也就是不断将高度减去1.5。这样,角色始终受到重力的影响。
实现着陆机制
通过上面的代码,我们可以成功的让角色降落。不过,角色还没有成功着陆,而是落到地面下方了。
着陆检测
因此,我们需要使用如果…那么…积木块,来让角色成功着陆。
对角色是否碰到舞台边缘做判断,如果碰到舞台边缘,我们将跳跃高度Y设为0。
修复着陆时的错误
为了避免角色卡在地面,我们还需要优化条件判断。
角色之所以停止移动,是因为只要接触到地面,变量“跳跃高度Y”就会固定为零。因此,无论在降落时还是降落后,变量“跳跃高度Y”都保持为零,不会再发生变化。
为了解决这个问题,我们需要添加更多的条件。只有当变量“跳跃高度Y”大于零时,才进行着陆判断。这样一来,当角色落地后再次按下向上键时,变量“跳跃高度Y”可以重新设置为10。
将处理逻辑封装成函数(自制积木)
创建积木:沿Y轴方向移动
由于循环代码变得有些复杂,现在我们可以将之前的处理逻辑改为自制积木。在创建自制积木时,别忘了勾选“运行时不刷新屏幕”选项。
现在我们又可以跳跃了。不过,在跳跃的结束后我们会发现每次着陆的 Y 坐标都不同。
这意味着有时它们被埋在地下或漂浮在空中。
虽然大多数情况下都无需特别担心,但是这一次,我们需要实现更精准的着陆。
精准着陆
从这里开始,我们将解决角色落地时被埋在地下或稍微漂浮在地面上的问题。
我们的策略是检查每个坐标以查看角色将移动到的下一个位置是否有地面。
通过将 Y 坐标改变 -1 来微调它
创建变量“上一个 Y 坐标”并初始化
为了检测角色是否接触到舞台并在需要时将其返回到之前的位置,我们可以将 Y 坐标设置为 -1。如果检测到接触,则将 Y 坐标还原到之前的值,以停止移动。
因此,在检查“上一个 Y 坐标”之前,需要先存储当前的 Y 坐标。
通过使用变量“上一个 Y 坐标”,无论 Y 坐标减少多少次,都可以轻松地将其恢复到原始值。
如果触摸屏幕边缘,则恢复正常
当角色碰到屏幕边缘时,将返回到之前的 Y 坐标。这将在接触地面后立即停止坠落。
但这样做的话,我们将无法再次跳跃。
这是因为,由于“如果…那么…”积木块的存在,在变量“跳跃高度Y”变得大于0之前,角色的Y坐标为-1来判断角色是否已经碰到屏幕边缘,所以总是确定角色已经碰到屏幕边缘了,从而无法再次跳跃。
现在需要采取两个步骤来改进这一点。
去掉变量“跳跃高度Y”为0的条件
更改为检查角色向上跳跃时的坐标
目前,我们使用了“将 Y 坐标增加- 1”,因此只检查向下的方向。然而,当角色跳跃时,是朝上的,所以不需要检查下方的情况,这实际上会产生干扰。
因此,我们可以在角色上升时将 Y 坐标增加 1,而在下降时将 Y 坐标减 1。
这里可以使用绝对值来有效处理这种情况。
那么,这个公式是如何运行的呢?
例如,假设变量“跳跃高度Y”的值为10,这是角色向上跳跃时的值。取10的绝对值仍然是10,因此公式为“10 ÷ 10”,结果是1。
再假设变量“跳跃高度 Y”的值为-5,这是角色下降时的值。取-5的绝对值是5,因此公式为“-5 ÷ 5”,结果是-1。
通过这个公式,我们可以实现角色上升时+1、下降时-1的效果。
然而,当我们实际运行时,可能会注意到跳跃高度变小了。此外,如果持续按住向上键,角色最终会漂浮在空中。这说明我们还需要进一步改进。
重复判断过程
跳跃高度变小的原因是,无论“跳跃高度Y”的值是10还是100,当除以绝对值后,结果都变成了1,所以 Y 坐标只改变了1。
因此,我们需要针对“跳跃高度Y”的绝对值多次重复这个过程,以确保跳跃效果正常。
现在,无论我们将初始的跳跃高度Y设为多少,我们都能够实现完美着陆!
防止在空中跳跃
现在,跳跃的感觉已经不错了,但目前的问题是,如果在跳跃过程中按下向上键,角色可以在空中随意跳跃。
虽然这种机制可能会带来一些有趣的玩法,但在这里我们还是禁止角色空中跳跃。
解决的思路是判断角色是否在空中,如果在空中,按向上键就不会产生任何效果。
创建变量“滞空时间”
在跳跃的过程中,将滞空时间增加1。
角色着陆时,将滞空时间设为0。
使用滞空时间作为跳跃高度的条件
只有当滞空时间小于 3 时,才将变量“跳跃高度 Y”调整为 15。
这个滞空时间的值为 3 设定得比较直观,建议自行检查运动效果以确定最适合的值。
完成后的效果:即使按住向上键,如果滞空时间小于 3,也会限制为单跳。如果滞空时间大于或等于 3,则仍然可以进行双跳。我们可以根据实际情况进一步调整这个值以达到最佳效果。