
1.3 大宝逗小宝
教学目标:掌握声音模块,掌握广播消息。
开发需求001:
选择一个房间的图片Bedroom1作为背景。添加一个小男孩角色Jaime。添加“Finger snap”“Scream2”“Laugh1”三种声音,用来模仿吵闹的效果。通过编程,依次播放三种声音,最后小男孩说“Sorry”并持续2秒,结束程序,如图1.3.1所示。

图1.3.1
分析:
这是一个顺序结构,先依次播放三种声音,再说“Sorry”。
在Scratch中,播放声音的积木有两个:

二者的区别相当于:

此时,可思考一个问题:如果想为游戏添加一个循环播放的背景音乐,那应该使用哪个积木呢?正确答案是:

注意:在使用播放声音之前,一定要先将声音导入到角色中,且只能被该角色调用。导入声音一共有4种模式,分别是:手动从声音库中导入、随机从声音库中导入、录制声音、本地上传。由于线下开展的竞赛要求赛场的绝对安静,所以这部分内容并不是重点,但在完成创意作品、游戏开发,享受编程乐趣的时候,声音模块又是必不可少的,因此这部分内容要求是必须掌握。
具体步骤:
1.准备素材。

2.添加声音。
(1)点击功能区中的“声音”按钮,如图1.3.2所示。

图1.3.2
(2)进入声音库,如图1.3.3所示。

图1.3.3
(3)找到要添加的声音,点击确认,如图1.3.4、图1.3.5所示。

图1.3.4

图1.3.5
(4)在“播放声音”积木里就能看到了。程序见下图(左)。
3.依次播放三种声音。程序见下图(中)。
4.说“Sorry”2秒。程序见下图(右)。

开发需求002:
在程序001的基础上,所有声音播放完毕后,让Jaime在房间里左右来回走动2次,Jaime在走动过程中,不断地思考“怎么办?”,最后说出“Sorry”持续2秒,结束程序。
分析:
在播放完所有声音后,说“Sorry”之前,要加入思考和走动的指令。
具体步骤:
1.初始化。
因为接下来角色要移动和转向,所以先要为角色设置初始位置及初始方向,每次点击绿旗都要进行初始化,见下图。

关于Scratch方向:
在Scratch 3.0中,点击“面向……方向”积木的参数部分,下方即出现一个带有刻度的圆盘,可以很直观地调整方向。
方向的默认的表示方法:0向上,90向右,180向下,-90向左。




也可以这样表示:0向上,90向右,180向下,270向左,360重新回到向上。或者:0向上,-90向左,-180向下,-270向右,-360重新回到向上。
注意:在描述右图红色部分方向区间的时候,不能使用-90≤方向≤180。
此时必须把180看成-180,然后取-180≤方向≤-90。或者把-90看成270,然后取180≤方向≤270。
(注:面向0方向表示面向0度方向。同理,90代表90度……)

2.带着思考的状态。
与思考有关的积木有两个。

它们的用法与“说……”积木一样,但区别在于呈现对话框的效果。


3.来回走动两次。
按照顺序结构,先走一次,再走一次。注意朝向,目视前方。程序见下图(左)。
这里会发现左右来回移动2次使用了重复的积木,用顺序结构感觉非常的麻烦。使用一个循环可以减少指令的行数,也让程序看起来更加简洁。程序见下图(右)。

4.经测试,角色会在向左走的时候倒过来了,原因是旋转方式发生了错误,如图1.3.6所示。

图1.3.6
在Scratch 2.0中,点击角色左上角的小写字母i(即information首字母),可以快捷地修改角色的旋转模式,并用图标清晰的表述出了3种旋转方式的特点,如图1.3.7所示。

图1.3.7
到Scratch 3.0时,编程界面从整体上更加简洁,去掉了一些不必要的功能。旋转模式被藏到了角色的方向中,如图1.3.8所示。

图1.3.8
(1)任意旋转(默认),在这种模式下,角色感觉上像是在舞台上转圈。就像表盘中的指针,可以指向任何方向,如图1.3.9所示。

图1.3.9
(2)左右翻转,角色只能面向-90和90方向,如图1.3.10所示。

图1.3.10
(3)不可旋转,全程都面向90方向,如图1.3.11所示。

图1.3.11
通常会用指令来修改角色的旋转方式,这样无论什么时候打开程序,都能够一目了然地看到角色的旋转模式经过了调整,并且这样做还有一个好处,那就是可以在程序运行的整个过程中,随时修改角色的旋转方式,而这正是用图标解决不了的。根据开发需求,Jaime要在房间里走来走去,只能面向左和右,所以使用左右翻转模式。程序见下图。

完整程序:

开发需求003:
在程序002的基础上,增加一个Abby角色,并修改角色名称为“妈妈”。程序运行后,妈妈在舞台上隐身。Jaime在房间里来回走动2次后,妈妈出现在舞台上,Jaime看着妈妈说“Sorry”后,结束程序。
分析:
运行程序后,Jaime出现在舞台上,同时Abby隐藏。当Jaime走完2次后,想办法通知Abby登场即可。
在Scratch中,多角色之间的互动,可以使用广播积木。使用时要注意给广播命名,做到“见名知义”。
通常,很多学习者为了图一时方便,并没有给广播(变量、列表、自制积木)命名,这是一个非常不好的编程习惯。在初学Scratch时,由于程序简单,积木量少,不命名或许会更快、更省时,但随着学习的深入,程序也愈加复杂,一个程序可能含有十几个、甚至几十个广播。命名不合理,极易造成混乱。
学习者要时刻牢记,编写的程序是给自己看的,程序的使用者不会关心程序背后的代码是什么。但当程序出现bug或后期需要升级维护时,该项工作通常是由程序的开发者来完成。如果不注意命名,那么升级维护时很有可能读不懂曾经写过的程序,所以一定要养成合理命名的好习惯。此外,为程序添加注释,也是提高程序可读性的重要手段。
具体步骤:
1.准备素材。

修改角色名称为“妈妈”,如图1.3.12所示。

图1.3.12
2.当绿旗被点击,Abby初始化。程序见下图。

3.Jaime走完两次后发出广播“妈妈出现”。程序见下图。

4.当Abby接收到广播,立刻显示。见下图。运行结果如图1.3.13所示。


图1.3.13
完整程序:

本程序使用了广播来实现多角色之间的互动,广播是一个Scratch特有的积木,也可以用条件判断来实现广播的功能。
拓展:
编写一个小猫和小狗对话的程序,执行结果如图1.3.14所示。

图1.3.14
尝试一:通过观察对比,总结“广播”与“广播并等待”的区别。程序见下图。

结论:
使用“广播并等待”,要等接收到广播的角色,把对应的脚本都执行完,才能回到发出广播的地方,让程序继续向下执行。
尝试二:在使用“广播并等待”的时候,如果广播接收者存在多线程,那么广播发出者的程序该如何继续执行?程序见下图。

结论:
在广播的接收端,要等到所有线程都执行完毕,才能回到发射端,让程序继续向下执行。
试一试:
Abby邀请Devin参加她的生日派对。当绿旗被点击,Abby和Devin均以造型1出现在如图1.3.15所示位置。2秒后,Abby切换成造型2,说“你参加我的生日派对吗?”2秒。见图1.3.16。接下来Devin切换成造型2,说“我会去的。”2秒。见图1.3.17。然后Abby切换成造型3,说“太好了,别忘了带礼物!再见。”2秒。见图1.3.18。最后Devin陷入沉思“啊?”。见图1.3.19。2秒后,Abby消失,Devin切换成造型4,一直说“别走,让我再考虑一下!”。见图1.3.20。

图1.3.15

图1.3.16

图1.3.17

图1.3.18

图1.3.19

图1.3.20