mit-scratch - 如何让 Scratch 精灵从迷宫边缘反弹?
问题描述
我目前正在制作一个项目,其中我有一个由玩家控制的精灵,它必须通过一个类似迷宫的阶段:
红框是播放器。如何让玩家无法通过黑线?
当我在 Scratch Day 指导时,这个问题出现了好几次。我在下面提供了一个自我回答,但我也有兴趣查看其他方法。
解决方案
我这样做的方法是使用我称之为“旧 X 和旧 Y”的方法。
本质上,您不断记录精灵的当前位置,然后在触摸线条时返回该位置。
为了更有帮助...
这是处理它的整个脚本:
让我们通过它并解释它是如何工作的。
首先,我们使用两个变量——这里命名为“OldX”和“OldY”。变量是存储项目中使用的数据的一种方式。它可以容纳数字或字母。变量有点像一个盒子——你可以在里面存储东西,并在不同的时间查看里面有什么。您可以在脚本选项卡的“数据”块部分创建变量。
那么这些变量的意义何在,我们在其中放入了什么?
这些变量存储精灵的x和y位置 - 它当前在舞台上的位置。Y 是垂直轴,x 是水平轴。
因此,这些变量所做的是使用“运动”中的“x 位置”和“y 位置”块来记录和存储精灵当前的位置。
所以我们正在存储数据。现在我们需要如何处理这些数据?我们为什么要存储它?
我们需要存储它,以便在我们接触线时可以使用它返回到那个点。
所以让我们看一下这个脚本的开头 - 我们有一个“当绿色标志点击时”,让脚本开始,还有一个“永远”,所以它总是检查它是否接触到线。
然后我们得到了“如果”。这是我们检查是否接触到线条的地方——这里我选择检查它是否接触到黑色,因为我将线条用作舞台的一部分,并检查边缘。根据您的项目,您可以将正在检查的内容更改为例如另一个精灵。
所以我们正在检查它是否接触了它无法通过的东西。然后我们需要让它实际上不通过。
这就是为什么我们要让精灵回到原来的位置。我们有“set x”和“set y”块,让它去一个特定的位置。我们将 x 和 y 设置为“OldX”和“OldY”变量,它们一直在存储位置,不断更新。
所以我们将 x 和 y 设置为原来的位置,并且......它不会穿过黑色!
最后一点 - 这并不明显,但脚本的顺序在这里很重要。如果将“set OldX”和“set OldY”块放在“if”部分上方,它将不起作用。如果它这样做,那么即使它接触黑色,它也会将变量设置为该位置,因此您最终只会像脚本不存在一样遍历这些行。
推荐阅读
- c# - 在 asp.net 核心中可能有多少“配置”方法的重载?
- python - 如果发生特定类型的异常,则执行附加代码
- java - 学习新 API 时的最佳实践
- hive - 为 DB2 永久存储 sqoop --map-column-hive 映射
- python - AttributeError:“玩家”对象在 Pygame 中没有“渲染”属性
- python - Pandas:通过分隔符拆分列并根据其他列重新排列
- django - 如何从下拉框django中获取值?没有提交按钮
- javascript - 使用 NodeJS 获取递归异步目录搜索的最终值
- python - 从空行中删除文件
- android - Android 电视机屏幕保护程序意图