分离克隆和角色触发器

随着在Scratch 2.0中引入了克隆(cloning),项目有许多高效的功能可以执行任务,而不需要创建大量的精灵。克隆是精灵的实例,这意味着它们继承了精灵的属性,但是它们是单独的对象。克隆通常可能有一个稍微不同的任务要执行,而父精灵,则有一个限制是,克隆和精灵都对几乎所有事件块(触发器)做出响应。因此,专门为精灵设计的触发器,当被克隆体信号激活时,克隆体也会运行它们。

概念

理解这个概念的一种方法是使用以下简单的脚本:

【图1】

与其名称相反,如果单击一个包含上述脚本的角色的克隆,则克隆本身将执行该脚本。如果只有精灵而不是其克隆应该响应脚本,则可以通过使用本地变量来自定义运行什么类别(即父级精灵或子级克隆)的触发器。如果不使用本地变量,则所有克隆都将共享同一个变量。

本地变量存储个体精灵和克隆的值,尽管它们具有相同的名称。例如,三个克隆可以有一个名为“x velocity”的变量,但每个克隆可以拥有其变量的自己独特的值。类似地,一个精灵可以将变量设置为特定的字符串,而每个克隆都可以将其设置为不同的值。这种不同类别之间的不同变量值的概念允许选择由父精灵或子克隆运行哪些脚本。

编程

当单击绿旗时,所有克隆立即被删除,但父级精灵仍然存在。这是将精灵的变量设置为其类别(在层次结构中的位置)指示的正确时机。

使克隆的行为与父级精灵不同。

【图2】

在变量“instance”中保存的少量数据仅仅显示该角色是一个角色。如果变量“instance”不是私有变量,则无法使用它。接下来,必须指定一个脚本,用于为所有克隆分配变量值,以显示它们是克隆。以下脚本可以实现此目的:

【图3】

上述脚本不会更改角色的变量。相反,每个克隆体都将拥有自己的变量。一旦完成了这一步骤,变量再结合一个“if语句”,就可以正确地将触发器指定为仅针对角色或其克隆运行。

【图4】

上述脚本仅适用于克隆,因为角色的变量没有设置为“clone”,角色不会执行语句块中的内容。这种变量方法是调试项目的一种有效方式,特别是在克隆体引起麻烦的情况下。

让克隆的行为彼此不同

以下示例显示了如何在单个精灵的脚本中管理多个克隆类型。请注意,在生成每个克隆(或一组相似的克隆)之前,将一个值分配给私有变量“type”。如果父精灵要忽略广播,则应在生成克隆之后但在期望广播之前设置其自己的唯一“类型”值。

【图5】

私有变量“type”的值从父精灵继承给每个克隆,因为其自己的“类型”值不同,所以它忽略了广播。这种技术允许许多不同的克隆类型表现出独特的行为。

标签: Scratch, Scratch编程, Scratch中国, 少儿编程, Scratch社区, Scratch编程社区, Scratch编程课程, Scratch编程教程