我们曾经遇到过一个克隆体复制上的问题,当接收到消息1时,主体克隆自己1次,于是屏幕上有了1个主体与1个克隆体,这个步骤没有问题,我们的本意就是发送1个消息,让主体克隆自己1次。当第2个消息传来的时候,情况就有了变化,屏幕上的克隆体也会接收到消息1,然后同样执行一次克隆的操作。随着消息的不断发送,克隆体的数量会按下面这样的方式增加:1、3、7、15、31、63、127、255,于是在第九条消息传来的时候,克隆体的数量就达到了上限。这显然不是我们想要的结果。
变量公有私有示例 提取码: axpz
我们来重温一下这个例子,当小猫这个角色被点击时,会发送1条消息,然后屏幕上会增加1个克隆体,第2次点击小猫,屏幕上会增加2个克隆体,继续点击小猫,整个屏幕就被小猫们占领了。
在之前的课程中,我们对主体使用了一块重复执行的积木,以避免克隆体继续克隆自己。今天,我们来尝试使用变量的方法。在之前的课程中,所有我们自定义的变量都是公共变量,而Scratch软件中预设的,积木形状相同而颜色与我们的自定义变量有区别的变量,都可以视为私有变量。
比如我们点击小猫,然后让小猫报出自己的x坐标,然后点击其他的任意角色,同样报出自己的x坐标。如果两个角色没有那么巧合的站在同一个位置,那么报出来的x坐标是不同的。小猫报出的是小猫的x坐标,而其他角色报出的,自然也是属于其他角色的坐标。私有变量看起来只有一块积木,用在不同的角色身上,它具体指代的数值是不同的。
我们之前的实例中,建立的都是公共变量,那么Scratch是否允许我们建立私有变量呢,答案是可以的。新建变量的时候,我们勾选底部的仅适用于当前角色,这样一个私有变量,就被愉快的建立了。
接下来我们为小猫添加这个私有变量,注意克隆体上也会有这个变量,但因为变量是私有的,所以这里虽然使用了相同的名字,实际上却是不同的变量,我们可以这样理解:
- 主体的“小猫的私有变量”
- 克隆体1的“小猫的私有变量”
- 克隆体2的“小猫的私有变量”
- 克隆体3的“小猫的私有变量”
- 克隆体4的“小猫的私有变量”
- 克隆体5的“小猫的私有变量”
- ...
由于我们在克隆体诞生后,及时的做了一个修改变量的操作,所以最终,等于1的“小猫的私有变量”有且只有一个,所以当接收到消息1时,只有主体才满足私有变量等于1的条件,这样执行克隆操作的个体就被区别出来了。考虑一下如果使用了公共变量会出现什么情况呢,大家也可以亲自动手尝试一下。