视觉脚本教程(逻辑方块)
第一步:为玩家制作跳跃逻辑
Lesson 2 of 10 • 20 XP
Keep your place in this quest
Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.
在本课中,我们将开始为我们的 Player 创建基本的移动逻辑。
仅使用 Cave Engine 的 Logic Bricks,我们将通过可视化逻辑实现一个简单的跳跃机制。这也将帮助您理解 Logic Bricks 背后最重要的想法之一:事件、条件和 动作 是如何协同工作来控制游戏行为的。
在这种情况下,逻辑将非常简单:
- 检查玩家是否按下了跳跃键。
- 检查 Player 是否被允许跳跃。
- 如果一切正确,调用 Player 的 Character Component 中的跳跃函数。
这是一个很好的第一个例子,因为跳跃是一个非常常见的游戏机制,但它也介绍了您在使用 Logic Bricks 创建游戏时会多次使用的基本结构。
1. 添加跳跃
要开始创建 Player 移动逻辑,我们首先需要获取游戏 Events。
Events 对象让您可以访问与输入相关的信息,例如键盘按键、鼠标按钮以及在游戏中发生的其他事件检查。
在 Logic Bricks 编辑区域内,右键单击以打开节点搜索菜单。
要快速找到一个节点,请使用放大镜图标标识的搜索字段,并输入您想要的节点名称。
Entity、Scene 和 Events 节点使用频率很高,因此它们在搜索窗口的顶部已经被突出显示。因此,您通常不需要手动按名称搜索它们。
选择 Get Events 将 Events 节点添加到您的逻辑中。

现在添加 Pressed 节点。
此节点将负责检查玩家是否按下某个特定键。
换句话说,这是我们逻辑告知:“玩家现在想跳跃”的条件。

选择将用于执行跳跃的键。
在大多数游戏中,Space 键通常用于跳跃,因此我们在这里也将使用它。

在配置跳跃键后,我们需要检查该键是否实际被玩家按下。
为此,我们将使用 If (Bool) 节点。
If (Bool) 节点接收一个布尔值,意思是一个可以为 True 或 False 的值。如果条件为真,逻辑将通过 True 输出继续。如果条件为假,则通过 False 输出继续。
在这种情况下,条件将是 Space 键是否被按下。

现在,以我们添加 Events 节点的相同方式,我们也需要获取当前的 Entity。
这很重要,因为跳跃操作不属于 Events 对象。Events 对象仅告诉我们按键是否被按下。实际的跳跃行为属于 Player Entity,更具体地说,是其 Character Component。
通过 Entity 节点,我们将能够访问附加到 Player 的组件。

从 Character Component 的 Output 中拖动一个连接并搜索 Jump。
这个节点将负责在条件满足时执行角色的跳跃。
因此,在这一点上,我们基本上是在说:
“当玩家按下跳跃键时,获取 Player 的 Character Component,并调用其 Jump 函数。”

这将是跳跃逻辑的主要流程:
Entity → Character Component → Jump
通过这个流程,我们从 Entity 访问角色组件,然后使用其跳跃函数。

现在,将 If (Bool) 节点的 True 输出连接到 Jump 节点的 Flow 输入。
这意味着当按下 Space 键时,条件将为真,Player 将执行跳跃。
如果键没有被按下,条件将为假,什么也不会发生。

然而,为了让这个逻辑实际运行,它需要连接到一个 Flow 事件。
Logic Bricks 不是随机执行的。它们需要一个入口点,即开始执行流的节点。
On Start 节点仅在 Entity 启动时运行一次。这对于初始化逻辑非常有用,例如设置变量、准备引用或在游戏开始时配置某些内容。
On Update 节点每帧运行。它适用于需要不断检查的游戏逻辑,例如移动、输入、相机控制或任何在游戏运行时可能变化的东西。
由于我们需要持续检查玩家是否按下了跳跃键,我们将逻辑连接到 On Update。
这确保在游戏过程中跳跃键的检查不断进行。

通过这个逻辑,角色现在应该能够跳跃。
为了使您的 Logic Bricks 井然有序,您可以通过右键单击并拖动选择所有用于创建此功能的节点,或在按住 Shift 的同时逐个选择它们。
选择节点后,按 C 创建一个注释。
这是一种非常有用的组织实践。随着逻辑的增长,注释将帮助您在视觉上分隔不同行为的不同部分,例如跳跃、移动、相机、攻击、交互等等。
即使逻辑现在很简单,尽早习惯组织您的节点将使您的项目在后期更易于理解。


2. 添加地面检测
在这一点上,您可能注意到一个小问题:如果我们持续按下 Space 键,角色可能会持续跳跃。
这发生是因为我们的逻辑仍然没有验证角色此时是否被允许跳跃。它只检查是否按下了跳跃键,然后立即调用跳跃函数。
在大多数游戏中,我们不希望玩家在空中无限跳跃。通常,玩家应该仅在接触地面时才能跳跃。
幸运的是,在 Cave 中解决这个问题非常简单。
为此,我们将使用 On Ground 节点。
On Ground 节点返回一个布尔值,指示角色当前是否接触地面。
所以现在,我们将检查两个条件,而不是仅检查一个条件:
- 跳跃键是否被按下?
- 角色是否在地面上?
只有当两个条件都为真时,Jump 节点才应被执行。
逻辑变为:
- 首先,检查 Space 键是否被按下。
- 如果为真,检查 Player 是否在地面上。
- 如果 Player 在地面上,执行 Jump。
- 如果 Player 不在地面上,则不执行任何操作。
这防止角色在空中无限跳跃。

添加这个地面检测后,跳跃逻辑对于基本的玩家控制器变得更加正确。
现在,Player 仅在按下跳跃键且 Character Component 报告 Player 当前在地面上时才能跳跃。这就是您在 Cave 中将用于许多游戏玩法操作的基本结构:首先检查输入,然后检查是否允许执行操作,最后才执行操作。