首页 > 解决方案 > 如何让 Scratch 精灵从迷宫边缘反弹?

问题描述

我目前正在制作一个项目,其中我有一个由玩家控制的精灵,它必须通过一个类似迷宫的阶段:

在此处输入图像描述

红框是播放器。如何让玩家无法通过黑线?

当我在 Scratch Day 指导时,这个问题出现了好几次。我在下面提供了一个自我回答,但我也有兴趣查看其他方法。

标签: mit-scratch

解决方案


我这样做的方法是使用我称之为“旧 X 和旧 Y”的方法。

本质上,您不断记录精灵的当前位置,然后在触摸线条时返回该位置。

为了更有帮助...

这是处理它的整个脚本:

在此处输入图像描述

让我们通过它并解释它是如何工作的。

首先,我们使用两个变量——这里命名为“OldX”和“OldY”。变量是存储项目中使用的数据的一种方式。它可以容纳数字或字母。变量有点像一个盒子——你可以在里面存储东西,并在不同的时间查看里面有什么。您可以在脚本选项卡的“数据”块部分创建变量。

那么这些变量的意义何在,我们在其中放入了什么?

这些变量存储精灵的xy位置 - 它当前在舞台上的位置。Y 是垂直轴,x 是水平轴。

因此,这些变量所做的是使用“运动”中的“x 位置”和“y 位置”块来记录和存储精灵当前的位置。

所以我们正在存储数据。现在我们需要如何处理这些数据?我们为什么要存储它?

我们需要存储它,以便在我们接触线时可以使用它返回到那个点。

所以让我们看一下这个脚本的开头 - 我们有一个“当绿色标志点击时”,让脚本开始,还有一个“永远”,所以它总是检查它是否接触到线。

然后我们得到了“如果”。这是我们检查是否接触到线条的地方——这里我选择检查它是否接触到黑色,因为我将线条用作舞台的一部分,并检查边缘。根据您的项目,您可以将正在检查的内容更改为例如另一个精灵。

所以我们正在检查它是否接触了它无法通过的东西。然后我们需要让它实际上不通过。

这就是为什么我们要让精灵回到原来的位置。我们有“set x”和“set y”块,让它去一个特定的位置。我们将 x 和 y 设置为“OldX”和“OldY”变量,它们一直在存储位置,不断更新。

所以我们将 x 和 y 设置为原来的位置,并且......它不会穿过黑色!


最后一点 - 这并不明显,但脚本的顺序在这里很重要。如果将“set OldX”和“set OldY”块放在“if”部分上方,它将不起作用。如果它这样做,那么即使它接触黑色,它也会将变量设置为该位置,因此您最终只会像脚本不存在一样遍历这些行。


推荐阅读