如何在 mit-scratch 中隐藏特定的精灵?

How to hide a particular sprite in mit-scratch?

我正在尝试编写一个临时代码,其中按下一个按钮将显示一个特定的精灵,按下另一个按钮将显示另一个精灵,第一个应该消失。

我想知道这里应该使用的scratch的基本特征。

我不太清楚你所说的按下按钮是什么意思。

如果您想在按键时显示一个 sprite "a" 并隐藏另一个 sprite 并在按键时执行相反的操作 "b" 那么这非常简单。

在下面,您可以看到必须在 "b" 按键时显示的 sprite 脚本。 必须在 "a" 按键上显示的 sprite 脚本看起来完全一样,除了 "show" 和 "hide" 块必须在任何地方切换。

有几种不同的方法可以做到这一点。有很多方法可以用更少的脚本或更少的精灵,并使用不同的方法来做到这一点。这里有两种方式,展示两种不同的方法,最后还有福利。

让我们从最简单的方式开始。

4 个精灵,8 个脚本,16 个方块。使用广播。

在此,我们将使用四个精灵:

我们有一个 Scratch 精灵、一个 Gobo 精灵、一个 ShowGoboButton 精灵和一个 ShowScratchButton 精灵。

这些精灵中的每一个都有脚本。

对于按下按钮时显示和消失的两个精灵 - Gobo 和 Scratch - 我们需要让它们在事件发生时显示和消失 - 当单击按钮时。所以当按钮被点击时需要发生一些事情。我们该怎么做?使用 WHEN THIS SPRITE CLICKED 块。将它与另一个块 BROADCAST 块结合使用,我们可以让它在按下时执行某些操作。

这就是 ShowGoboButton 精灵在其脚本中的内容:

单击按钮时,它会广播一条消息...但此刻,它正在向虚空广播。没有人在收听广播。 Gobo(和 Scratch)精灵需要监听广播,然后根据听到的内容显示或隐藏。

这就是 Gobo 隐藏在脚本中的内容:

WHEN GREEN FLAG CLICKED 脚本使精灵在项目启动时显示。另外两个都以 WHEN I RECEIVE hat block 开头,是它如何监听广播。它会监听这两条消息,如果是正确的消息,它就会显示出来。如果是错误的,它会隐藏。

从那些,推断出其他两个精灵 - 它是完全相同的代码,但相反。

这是最简单的方法,也是一种有效的方法,也是初学者最好的方法。但是,如果你的级别稍微高一点,那么使用变量会更好。

4 个精灵,4 个脚本,26 个方块。使用变量。

现在我们将设置一个变量,而不是广播。找块时可以在数据部分找到变量。

等等 - 究竟是什么变量?
变量就像一个盒子,临时保存你放入其中的内容。您可以将任何字符串放入变量中 - 数字、字母、混合...

所以我们的变量将被命名为"WhichSpriteShows",我们将使用这个盒子来存储精灵应该显示的数据。

进入代码,回头看看广播。现在我们不再让按钮广播,而是让它设置一个变量。

这就是 GoboButton 现在正在做的事情:

按钮不再广播消息;现在,它只是改变了盒子里的东西。

现在,我们不再让 Gobo 监听广播,而是让 Gobo 关注变量设置的内容 - 盒子里有什么。

Gobo 里面是这样的:

哇,哇,哇。您可能会问,FOREVER 是怎么回事。为什么我们首先将 WhichSpriteShows 设置为 0?如果变量设置为 "Gobo" 以外的任何值,为什么不通过在 IF... 的 ELSE 部分粘贴一个普通的 HIDE 块来隐藏精灵,而不是执行看似多余的检查以查看它是否已设置到 "Scratch"?

FOREVER 是必需的,以便脚本始终侦听以查看变量的当前状态。

决定在开始时将 "WhichSpriteShows" 设置为“0”,并额外检查它是否设置为特定的 ELSE,这样两个精灵都会在开始时显示,当单击绿旗。如果你不想这样,你可以相应地修改代码:)

与广播一样,推断 Scratch 精灵。


奖金

现在...如果您想 真正 花哨,并使用更少的 sprite,总共只用两个 sprite 是可能的。克隆人的魔法。我不打算在这里解释太多,因为一切都应该是相对不言自明的,如果你正在做我告诉你的最复杂的方式,那么你必须已经是 Scratcher 或想要破坏东西。

2 个精灵,3 个脚本,61 个方块。使用克隆。

要了解其工作原理,您需要查看舞台的设置方式:

按钮精灵的脚本比较简单:

精灵的脚本也不是太疯狂:

如果你愿意,你可以尝试一下我以前做过的项目 here