3.3 不停地舞蹈——无限次循环
在图3-1里,细心的你会注意到一个很特殊的循环——没有指定次数的循环(见图3-9)。
图3-9 无限次循环
这个循环的特点是没有办法设定执行次数,循环的内容会一直执行下去。如果不通过程序设定,那么只有按下舞台区域绿旗旁边的红色按钮才会终止。
接下来我们通过点谁谁跳舞的舞蹈大会来了解无限次循环。
背景:游乐场(atom playground),聚会(party),音箱室(party room)
角色:Cassy Dance,Catherine Dance,D-Money Hip-hop
故事:三个小朋友都是舞蹈高手。每个人准备的舞蹈和舞台设计都不一样。他们都想第一个跳,争执不下。于是决定权交给了玩家。
玩法要求:
单击绿旗音乐响起。
玩家点谁谁就跳舞。
每个人跳舞的背景不同(见图3-10)。
图3-10 舞蹈大会
我们的故事中有三个背景,三个角色,在开始程序之前,我们需要先增加背景和角色。
背景可以从背景库中选择三个,只要你认为是合适跳舞的场地都没有问题。
增加角色时,特别注意从角色库的“舞蹈”分类中选取(见图3-11)。
图3-11 角色库“舞蹈”标签中的角色
这个标签中的角色与其他普通的角色有什么特殊之处呢?我们对比一下Cassy Dance和Maya(见图3-12)。
图3-12 不同角色的造型
在工具箱的造型标签下,Cassy Dance有4个造型,而Maya只有1个造型。想一下,如果让角色的造型不停变化是什么效果?对于Maya来说,如果切换造型,那么结果没有变化,因为只有一个造型。但对于Cassy Dance就不同了,当你改变她的造型时,你会发现她在舞台上有了动作!
在Scratch中,有两个可以改变角色造型的命令(见图3-13)。
图3-13 改变角色造型的命令
这个命令会将角色的造型切换为某一个固定的造型,这个固定的造型是由造型的名称决定的。
这个命令没有指定具体的造型,如果多次执行,那么角色会按顺序由上向下切换,当切换到最后一个造型后,再运行“下一个造型”,则造型会切换到第一个。
试一试
把Cassy Dance作为角色,用鼠标连续单击程序区域的下一个造型,Cassy Dance完成了什么动作呢?
Cassy Dance跳舞了!
下面我们来看一下如何用程序来让Cassy跳舞。
3.3.1 用程序让Cassy舞蹈
在前面的操作中,我们用连续单击“下一个造型”的方式,让Cassy跳舞,这相当于让角色连续运行“下一个造型”这个命令,在程序中,可以让这个命令循环执行。在Scratch中,具体程序如图3-14所示。
图3-14 疯狂的跳舞
试一试
在程序区域中写下这一段代码,然后单击,发现了什么?
Cassy像电影中的快放一样,不停快速舞蹈,以致你可能看不清人物的舞蹈动作!这和我们日常生活中看到的电影或动画片是不一样的!
为解决这个问题,我们先来看一下电影或动画的原理:你以前可能看过组成电影的实际胶片。从表面上看,它们像一堆画面串在一条塑料胶片上。每一个画面称为一帧,代表电影中的一个时间片段。这些帧的内容总比前一帧有微小变化,这样,当电影胶片在投影机上放映时就产生了运动的错觉:每一帧都很短并且很快被另一个帧所代替,这样就产生了运动。
有点复杂吧!简单地说,就是一幅幅图片在你眼前快速翻过,然后你会感觉图片中的人物动了起来。根据人眼的特点,当每秒有24帧以上的图片从你眼前翻过时,会产生连续感。如果太多了,那么人物动作会很快,眼睛就有点反应不过来了,就像你用上面的程序实现的舞蹈。
那么,我们怎么让Cassy的舞蹈动作慢下来呢?在程序命令区的“控制”标签中,第一个命令是“等待1秒”,我们可以把它加入程序中来看一下效果。怎么样?我们的舞蹈是否又变成了一个慢动作?但是它让Cassy的舞蹈慢了下来!
我们可以修改中圆圈里的“1”,例如变成0.1,那么你会发现舞蹈动作就合理了很多。
现在,程序变成了图3-15所示的样子。
在Scratch里,很多时候,我们可以通过这个命令来改变动作或快慢。
但需要解释的是,这个命令并不是让动作的执行变慢了,而是执行完了上一个命令,然后执行“等待0.1秒”这个命令,从程序的实现效果上看,让角色的动作变慢了。
图3-15 合理的舞蹈
3.3.2 点谁谁跳舞以及背景切换
在这个跳舞的程序里,我们有两项特殊要求:
玩家点谁谁跳舞。
每个人跳舞的背景不同。
点谁谁跳舞,这句话实际上包含了两个动作:①鼠标单击角色;②角色跳舞。鼠标单击角色,在Scratch中可以有一个命令直接实现(在“事件”标签里),如图3-16所示。
图3-16 “当角色被点击时”命令
需要注意的是,这个命令的顶上是个圆弧,下面是一个凸起,这意味着这个命令是程序运行的起点,顶上是没有办法连接命令的!
试一试
把这个命令拖到程序区域里,把图3-14的程序块连接到它的下方,然后单击角色看看发生了什么?
下面只需要增加切换背景的命令就可以了,这一功能我们在魔法钢琴中已经学过,这里就不再多说了。
最后,我们得到了一个角色跳舞的完整程序(见图3-17)。
图3-17 角色舞蹈的完整程序