【问题标题】:How to hide a particular sprite in mit-scratch?如何在 mit-scratch 中隐藏特定的精灵?
【发布时间】:2018-05-29 04:24:51
【问题描述】:

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

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

【问题讨论】:

标签: mit-scratch


【解决方案1】:

有几种不同的方法可以做到这一点。有一些方法可以使用更少的脚本或更少的精灵,并使用不同的方法。这里有两种方法,展示了两种不同的方法,最后还有一个奖励。

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

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

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

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

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

对于在按下按钮时显示和消失的两个精灵 - Gobo 和 Scratch - 我们需要让它们在事件发生时显示和消失 - 当单击按钮时。因此,单击按钮时需要发生一些事情。我们如何做到这一点?使用 WHEN THIS SPRITE CLICKED 块。将它与另一个块 BROADCAST 块结合使用,我们可以让它在按下时做一些事情。

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

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

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

WHEN FLAG CLICKED 脚本在项目启动时显示精灵。另外两个都以 WHEN I RECEIVE 帽子块开头,是它监听广播的方式。它监听两条消息,如果它是正确的,它就会显示。如果是错误的,它会隐藏。

根据这些,推断其他两个精灵 - 它是完全相同的代码,但相反。

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

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

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

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

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

进入代码,回顾一下广播。现在我们将设置一个变量,而不是广播按钮。

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

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

所以现在,我们让 Gobo 关注变量设置的内容,而不是让 Gobo 收听广播。

这就是 Gobo 里面的东西:

哇,哇,哇。你可能会问,FOREVER 是怎么回事。为什么我们一开始将 WhichSpriteShows 设置为 0?如果变量设置为“Gobo”以外的任何内容,为什么不通过在 IF...、ELSE 块的 ELSE 部分粘贴一个普通的 HIDE 块来隐藏精灵,而不是执行看似多余的检查以查看它是否设置为“从头开始”?

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

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

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


奖金

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

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

要了解这是如何工作的,您需要了解舞台是如何设置的:

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

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

如果你愿意,你可以在 here 上玩我用来制作这个的项目。

【讨论】:

    【解决方案2】:

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

    如果您想在按键“a”时显示一个精灵并隐藏另一个精灵并在按键“b”的情况下执行相反的操作,那么这非常简单。

    您可以在下面看到必须在“b”键上显示的精灵脚本。 必须在“a”按键上显示的精灵脚本看起来完全一样,除了“显示”和“隐藏”块必须在任何地方切换。

    【讨论】:

    • 我对此投了反对票,因为虽然它确实提供了一种隐藏/显示单个精灵的方法,但问题中要求的 OP 显示单个精灵并且第二个精灵消失。这不是这样做的:/
    • 我已经从头开始测试了代码,它按描述工作:按“a”确实出现了一个精灵,并使另一个精灵同时消失,而按“b”则相反。是不是因为我在上面的文字中清楚地描述了第二个精灵的代码,但我没有显示截图?
    • @JanVdA 我认为这是因为您没有显示第二个精灵的代码。 (别担心,我投了赞成票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多