高级篇——移动三色球1

【疑惑篇】

点击绿旗按钮,出现三列不同颜色的小球,然后三种颜色小球相互交错合并为一列。

视频演示open in new window

亲自操作open in new window

想一想: 如何将小球作为多个角色或一个角色分别实现?

【线索篇】

案例分析

它们发生的场景是什么?

默认白色背景

每个场景中有哪些角色?

每个场景中的每个角色在做什么?

  1. 点击绿旗按钮,舞台中出现黄、蓝、红三列小球。
  2. 三列小球各自向下移动,并保持一定的间距。
  3. 黄色和红色小球往中间移动,三种颜色小球相互交错合并为一列。

积木提示

当绿旗被点击

移动(10)步

移到x:(0) y:(0)

在(1)秒内滑行到x:(0) y:(0)

将x坐标增加(10)

将y坐标增加(10)

y坐标

将大小设为(100)

显示

隐藏

等待(1)秒

重复执行(10)次

如果<>那么

当作为克隆体启动时

克隆[自己]

加法

减法

乘法

等于

建立一个变量

使用变量

将[我的变量]设为(0)

将[我的变量]增加(1)

【解决篇】

看到这个案例,只要你是学习过初级篇课程的朋友,一定也会觉得实现它很容易。

第一步使用的是默认背景,不需要修改,直接在舞台中添加需要的小球角色。这里总共用了3个黄球、3个蓝球和3个红球,默认将它们全部隐藏起来。

接着,就可以开始用程序控制它们移动。

1. 点击绿旗按钮,舞台中出现黄、蓝、红三列小球。

这一步很简单,设置好每个小球的大小和初始位置,然后将它们显示出来就可以了。

2. 三列小球各自向下移动,并保持一定的间距。

这一步同样很简单,蓝球出现后等待1秒钟,然后第2和第3个小球开始往下移动。

你可以选择一种自己喜欢的移动方式,使用移动(10)步、使用在(1)秒内滑行到x:(0) y:(0)、使用将y坐标增加(10)都没问题。

黄球和红球出现后等待2秒钟,然后各自也开始往下移动。

在这一步中你需要注意的问题是,为了保证接下来它们可以交叉合并成一列,你需要提前规划好每个小球移动的距离。为了美观,你还可以考虑将它们彼此之间的间隔保持一致。

3. 黄色和红色小球往中间移动,三种颜色小球相互交错合并为一列。

最后一步也很简单,将黄球和红球移动到舞台中间,与蓝球合并成一列即可。

这样一来,你就实现了移动三色球的案例。

虽然功能已经实现,问题却还没结束。假如现在需要将小球的数量增加的话,你会怎么做?还是像上面这样继续添加小球角色,在给每个角色添加各自的积木块,让它们移动到各自的位置?

相信在你学习过中级篇之后,马上就能想到可以使用克隆积木。就像在魔法棒中你所做的一样,只需要把小球使用的指令串移到当作为克隆体启动时积木后面执行即可。现在我想请你打开之前完成的案例,观察一下这些使用克隆积木的地方,有没有什么共同点?

通过观察你会发现,在之前使用克隆积木的案例中,每个克隆体所完成的任务都是一样的,唯一的区别是利用了在(1)和(10)之间取随机数积木,使得它们在舞台上表现出了不同的随机效果。

例如,魔法棒中的星星会从魔法棒的中间向外移动。消灭虫子中的虫子会在墙面范围随机移动,炮弹会沿着炮筒方向向前移动。企鹅下楼梯中的踏板会从舞台底部向上移动。

现在重新请你观察一下上面每个小球的指令串,它们完成的任务相同吗?你可以自己尝试着使用克隆积木,看看能不能完成这个案例?

在上面的实现中,每一个小球的指令都是确定的,而且不完全相同。例如同样都是往下移动,但是每个小球移动的位置都不相同。这时候如果要使用克隆积木的话,就必须在当作为克隆体启动时积木后面,想办法分辨出每一个小球,然后让它们移动不同的距离。

如何分辨不同的克隆体呢?你必须利用克隆加变量才能分辨它们。

在新建一个变量时,会有两个选项。适用于所有角色和仅适用于当前角色。

在之前案例中我们简单的介绍过,选择适用于所有角色时,每个角色(包括舞台)都可以看见并且修改这个变量。这种变量就像是教室里面的黑板,大家都可以看见上面写的内容,也可以将原来的内容擦掉或者重新写新的内容。

选择仅适用于当前角色时,这个变量就只属于当所选角色自己拥有,其他角色和舞台都看不见它,更不能对它进行修改。这种变量就像是你大脑中的记忆,只有你自己知道记住了什么,也只有你自己可以修改记住的东西。

当你选中一个角色,为它新建一个变量,并选择仅适用于当前角色后,你可以对该角色使用克隆积木。这时每个克隆体就会拥有一份属于它自己的变量,并且变量值与原始角色被克隆时一模一样。这就像是每个克隆体在被克隆时,都复制了一份与原始角色一模一样的记忆。克隆完成后,它们就会各自保留自己独有的记忆,相互之间不能查看和修改对方的变量。

接下来我们就回到移动三色球中,看看如何利用这种克隆的方式来实现这个案例。

既然要用克隆体,我们就不再需要这么多角色,你可以只保留三个不同颜色的小球。接下来,你可以为每个小球新建一个变量,名字分别叫做“黄球编号”、“蓝球编号”和“红球编号”,新建时全部选择仅适用于当前角色

全部新建完成后你会发现,每个角色的变量分类中都只能看见自己新建的变量。例如,选中黄球角色时,变量分类中就只有“黄球编号”变量,而没有“蓝球编号”和“红球编号”。

观察显示在在舞台上的变量你还会发现,显示的名字中除了刚刚新建时填入的变量名,在它前面还增加了角色的名称。

例如,黄球角色的“黄球编号”变量显示在舞台上的名称就是“黄球:黄色编号”。

通过以上这两种方式,你就可以区分某个变量是适用于所有角色还是仅适用于某个角色。

新建了这个编号有什么作用呢?刚刚我们说过,每一个克隆体都会复制一份属于自己的变量,现在你就可以将编号变量当做每个克隆体的身份证号,从而分辨出不同的克隆体,让它们完成不同的操作。

例如,你可以将最上面的小球编号设为1,中间小球编号设为2,最下面的小球编号设为3。具体如何操作?

因为每个小球的大小都是相同的,所以你可以在克隆之前,先调整好原始角色的大小。接着,与之前案例中使用克隆体的方法类似,你可以将原始角色隐藏起来,当作为克隆体启动时再将它们显示出来使用。因为每种颜色有三个小球,所以每个角色需要重复克隆[自己]3次。

到目前为止所有的操作都与之前案例中使用克隆体时一样,你可以点击绿旗按钮进行测试,用手拖动舞台上被克隆出来的小球,此时舞台上刚好会有9个小球。

接下来,我们就来为每个不同的小球设置属于自己独一无二的编号。方法很简单,在每个小球被克隆之前,你只需要想办法修改编号的变量值即可。

例如,第一个黄球被克隆前,将“黄色编号”设置为1,第二个黄球被克隆前,将“黄色编号”设置为2,第三个黄球被克隆前,将“黄色编号”设置为3。你可以像下面这样来实现。

重复执行(3)次之前,先将3种颜色小球各自的编号设置为1。进行循环后,第一个小球会被克隆出来,此时它会复制一份编号变量,并且变量值也为1。接着,在克隆[自己]之后,将编号变量值增加1,这样一来编号变量就变成了2。接下来会继续执行重置积木中的指令,重新克隆[自己],这时第二个被克隆出来的小球同样会复制一份编号变量,但是它的变量值已经变成2。继续重复,先将编号变量值增加1,再重新克隆[自己],这时第三个被克隆出来的小球同样会复制一份编号变量,但是它的变量值已经变成3。

你可以在当作为克隆体启动时积木后面利用说(你好!)积木,让每个克隆体说出自己的编号值。

点击绿旗按钮进行测试,同样手动拖动小球后你会发现,每种颜色的小球都会说出不同的编号。

有了不同编号作为身份识别,接下来你就可以利用如果<>那么积木对它们的编号进行判断,让它们分别完成不同的事情。

每个小球具体需要做些什么呢?是不是跟之前9个小球角色做的事情是一模一样的。

好了,点击绿旗按钮进行测试,你现在只用了三个角色就完成了移动三色球的案例。这也是利用克隆加上仅适用于当前角色的变量来区分克隆体,让它们各自完成不同任务的方法。

继续观察现在的指令串,你会发现虽然角色变少了,但是你需要使用的指令积木并没有减少。当你需要继续增加小球的数量时,还是需要不停地在当作为克隆体启动时积木后面追加指令。有没有什么方法可以将不同颜色小球的操作合并起来?这样就在不用增加指令的同时,还能控制更多的小球。

接下来就是考验你数学归纳能力的时候了,仔细观察一下每种颜色的小球,它们移动的距离或者坐标值有没有什么规律?你可以利用说(你好!)积木来观察和记录它们移动过程中的坐标变化。

在第一步中,每种颜色小球的x坐标值都相同,只是y坐标值不同。并且从上往下,每个小球的y坐标值逐渐减少,相差都是30。

如果你熟悉数学公式的话,看见他们的y坐标值以后肯定能想到等差数列公式。

在这里我们的首项a就是第一个小球的y坐标值100。公差d就是两个小球y坐标的相差值30。因为我们的坐标值是逐渐减少,所以d等于-30。最后,公式中的n正好就是每个小球的编号。

利用这个公式,我们就能直接算出每个小球的初始坐标值,然后利用移到x:(0) y:(0)积木将它们移到各自的初始位置。

接下来,继续观察它们往下移动以后,坐标值有什么规律。

通过观察你会发现,每种颜色小球各自的y坐标依然还是等差数列,公差d为-90,只是首项各自不相同。同样的,还是直接算出每个小球移动以后的坐标值,然后利用在(1)秒内滑行到x:(0) y:(0)积木让它们滑行到各自的新位置。当然别忘了滑行之前,每种小球会等待不同的时间。

最后一步,蓝球不需要做任何操作。黄球和红球会横向移动至舞台中间,也就是y坐标不变,x坐标都变为0。如何让y坐标保持不变,你可以像上一步一样,重新计算一遍每个小球的y坐标值。另一种更简单的方法,你可以使用y坐标积木,直接获取每个小球当前的y坐标值。

以上,我们就使用了一种更简洁的方式完成了移动三色球。以后你需要增加小球数量时,只需要修改重复克隆的次数,以及重新计算每个小球各自的位置就可以了。

当你按照上面的操作完成案例后,你还可以继续尝试着将角色减少为1个,或者不使用在(1)秒内滑行到x:(0) y:(0)积木,改为使用移动(10)步将x坐标增加(10)将y坐标增加(10)等积木来让小球移动。

想看更多学习案例,欢迎点击查看《Scratch 3学习手册》open in new window

想要获取所有案例源码和素材,以及获得我对你在学习中所遇问题的一对一解答,欢迎加入石头解忧杂货店

Last Updated:
Contributors: lanheixingkong