这是最简单的跳跃方法,非常适合 Scratch 初学者。通过应用此功能,您可以轻松实现角色的跳跃效果,并在此基础上创作出更复杂的跳跃动作。
第一步:实现简单跳跃效果
1. 添加初始事件
首先,在代码区拖动并放置以下代码块:
这个代码块将作为所有跳跃动作的启动点。
2. 设置循环
在 “当绿旗被点击” 的下面,添加以下代码块:
这个代码块会让后续的跳跃代码持续运行,使得程序能够随时响应按键动作。
3. 创建跳跃条件
在 “重复执行” 代码块内,放置以下代码块:
这个代码块会在满足特定条件时执行里面的代码。接下来,我们将定义跳跃的触发条件。
4. 定义按键触发条件
在 “如果 <条件> 那么” 代码块中,设置触发条件为:
你可以通过点击下拉菜单,选择“向上箭头键”作为跳跃的触发键。这样,当按下这个键时,角色将开始跳跃。
5. 设置跳跃动作
在 “如果 <条件> 那么” 代码块中,添加以下代码块:
这个块将控制跳跃的次数。我们选择 10 次作为示例,当然你可以根据需要调整次数。
这个块用来设置每次跳跃之间的等待时间。0.01 秒的等待时间会使跳跃动作更为顺畅。
这个代码块会让角色在每次循环时沿 y 轴(垂直方向)上升 10 个单位。改变这个数值可以调整角色跳跃的高度。
6. 实现角色落地
为了使角色能够自然落地,我们需要复制之前的代码块并进行修改:
- 将刚才添加的 “重复 10次” 和 “等待0.01秒” 代码块复制一份,并放在“如果 <条件> 那么”块的下面。
- 然后,将 “将 y 坐标改变10” 的值改为负数,如 “将 y 坐标改变-10”。
这样,角色在跳跃之后会自动下降,直到回到起点。
第二步:实现重力跳跃效果
第一步:初始化设置
添加“当绿旗被点击”代码块

添加“重复执行”代码块

这个代码块会让程序不断循环执行其内部的内容。
添加“将y坐标增加”代码块

里面的数值将在后面指定。
创建并重命名变量

在“变量”选项卡中,创建一个变量并重命名为“跳跃高度”。
将“跳跃高度”放置在“将y坐标增加”中

这样,我们就可以根据跳跃高度来改变角色的y坐标。
第二步:设置跳跃逻辑
添加新的“当绿旗被点击”代码块

我们将为跳跃逻辑创建一个新的流程,与之前的初始化流程分开。
添加“重复执行”代码块

这个块同样会让流程中的内容不断循环执行。
添加“如果…那么…否则”代码块

将这个条件判断代码块放入“重复执行”代码块中,用于检测角色是否接触到边缘。
添加“碰到舞台边缘”条件

我们需要检查角色是否触碰到屏幕的左、右、上、下边缘。
设置“跳跃高度”设为0

当角色触碰到舞台边缘时,将“跳跃高度”设置为0,停止跳跃。
检测“按下向上箭头键”

将默认的“按下空格键”修改为“按下向上箭头键”,用于触发跳跃动作。
设置“跳跃高度”

将“跳跃高度”设置为一个正值,值越大,跳跃高度越高。
添加“将跳跃高度增加”

这里的“跳跃高度”变量设为负值,用于模拟重力效果。这个值决定了角色下落的速度。
第三步:实现多段跳跃效果
1. 初始化设置
首先,我们需要对角色的初始位置和状态进行设置,确保每次游戏开始时,角色都处于正确的位置和状态。
- 移动角色到初始位置: 将角色的 Y 坐标设置为
-129,这将被视为地面的高度,确保角色一开始就站在地面上。 - 设置旋转方式: 将角色的旋转方式设置为“左右翻转”,这样角色在跳跃和移动时只会左右翻转,避免不必要的上下翻转。
2. 定义与初始化变量
在跳跃机制中,我们需要定义和初始化一些变量,以便于控制角色的跳跃行为。
3. 空中与地面状态处理
通过判断角色的 Y 坐标,我们可以知道角色是在空中还是在地面上,从而决定下一步的操作。
- 地面状态: 当角色在地面上时,将
当前跳跃次数 重置为 0,并确保角色的 Y 坐标不低于地面

- 空中状态: 当角色在空中时,逐渐降低
跳跃高度,模拟重力的效果,直到角色回到地面。
4. 跳跃的触发与多段跳跃限制
- 触发跳跃:当按下跳跃键(例如上箭头键)时,首先让 Y 坐标立即增加一定值(例如 10),然后根据
跳跃高度 进一步调整角色位置。记得增加 当前跳跃次数。

- 多段跳跃限制: 设定角色最多能够跳跃的次数,确保在达到限制时,角色无法继续在空中跳跃。
5. 防止长按造成的跳跃延迟
为了避免长时间按键导致跳跃过高或过长,建议在每次跳跃后添加一个短暂的等待时间(例如 0.1 秒),确保跳跃动作更加流畅自然。
第一步:实现精准着陆
创建跳跃高度变量
跳跃高度由变量“跳跃高度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,则仍然可以进行双跳。我们可以根据实际情况进一步调整这个值以达到最佳效果。