2.2 动作指令积木块实例编程
在Scratch中,一个角色的动作主要包括角色移动到舞台中某一个确切的位置(位置用点的坐标形式给出)和将角色旋转到指定的方向。
2.2.1 实例一:田径训练
在Scratch的动作模块中“移到x:××y:××”、“在××秒内滑行到x:××y:××”、“将x坐标设定为××”和“将y坐标设定为××”是4个使用绝对坐标来精确地把角色移动到舞台的某个具体位置的指令积木块。
1.情景介绍
在体育课上,小红选择的是短跑训练,老师让她沿直线跑道进行训练。小红和其他小朋友站在跑道的一端,跑道的另一端作为终点。为了让他们准确找到终点的位置,老师在终点处立了一面小红旗。小红和小朋友都蓄势待发,等待老师的口令。
2.场景搭建
在小红的短跑训练中,首先要确定跑道,设定跑道的起点位置为(-200,20),终点位置(也就是红旗所在的位置)为(200,20),从角色库“物品”中找到“Green Flag”,运用Scratch中自带的绘图工具将其改为红色(如何修改颜色第3章会详细讲解)并命名为“Red Flag”,搭建效果如图2-9所示。小红应该站在跑道的起点位置(-200,20),而小红的目标位置为(200,20)。
3.脚本编写
(1)小红脚本的编写。首先设定开始跑步前小红在舞台上的位置。因为跑道的起点位置是(-200,20),所以小红的起点位置也是(-200,20)。把动作模块的“将x坐标设定为××”和“将y坐标设定为……”指令积木块拖到小红的脚本区,并进行坐标设置,如图2-2所示。为了更加清晰地看到她的位置,选中动作模块中的“x坐标”和“y坐标”复选框即可,如图2-3所示。单击小绿旗运行程序,就会看到如图2-4所示的效果,小红站在跑道的起点上了。
图2-2 设置跑道起点指令积木块
图2-3 设置坐标显示在舞台指令积木块
图2-4 小红的起点位置
其次,要体现出小红从跑道的起点到跑道的终点。小红冲刺的位置就是小红旗的坐标位置(200,20),小红跑到跑道终点时,小红的终点坐标为(200,20),利用“移到x:××y:××”指令积木块便可一步实现,如图2-5所示。然而小红跑到终点并不是瞬间完成的,需将“移到x:××y:××”改成“在××秒内滑行到x:××y:××”,如图2-6所示。至此,小红终于顺利地完成了整个动作。小红在跑步过程中的所有脚本如图2-7所示。
图2-5 跑道终点坐标设置
图2-6 跑步过程脚本
图2-7 小红在跑步过程中涉及的所有脚本
(2)小红旗的脚本。小红旗位于跑道终点,其坐标位置为(200,20),使用和图2-2一样的指令积木块就可以了。小红旗的脚本如图2-8所示。
图2-8 小红旗的脚本
4.运行效果
图2-9所示是小红在跑道起点时的状态,图2-10所示是小红跑到终点时的状态。
图2-9 小红在跑道起点
图2-10 小红在跑道终点
2.2.2 实例二:踢足球
小红进行短跑训练的同时,小明也进行着足球训练。小明跑向足球时会遇到以下两种情况,一种情况是直接向足球跑去,另一种情况是绕过障碍物跑向足球。在踢足球这项运动中,涉及小明和球,从而发生相对运动;在踢足球这个情境中,涉及小明和球两个角色。小明和球的运动是相对的,所以在编写脚本的过程中就需要用到与相对坐标有关的动作指令积木块。
1.小明径直跑向足球
(1)情景介绍:小明站在不同的位置,通过助跑将处于球门区外的足球朝球门踢出,从而射门进球。
(2)场景搭建:为了实现小明跑向足球的整个过程,需要先任意选择一个足球场,然后添加小明和足球这两个角色。足球可以从角色库“物品”中选择“Soccer ball”(此处为了方便大家观察足球的旋转,添加的足球是“从本地文件中上传角色”并命名为“Soccer ball1”),搭建效果如图2-14所示。在射门的过程中,小明是运动的,而足球是相对静止的,这时可以把足球可看成一个定点,而小明是一个动点。
(3)脚本编写。
1)足球脚本的编写。因为小明进行的是定点射门训练,所以足球处于固定位置。为了方便起见,把足球的初始位置设为(0,0),其脚本如图2-11所示。
图2-11 足球的脚本
2)小明脚本的编写。小明有两种方法可以跑向足球,一种方法是首先设定小明的初始位置,这里设置为(-200,150),然后小明要跑向足球,利用“将x坐标增加××”和“将y坐标增加××”指令积木块,分别输入x坐标增加的数值和y坐标增加的数值,实现小明移动到足球。脚本如图2-12所示。
小明跑向足球的另一种方法是利用“面向××”和“移到××”两个指令积木块。第一个指令积木块使角色面向鼠标指针或者其他角色,单击下拉按钮即可进行选择,在此情景中小明面向足球,所以选择足球角色的名称Soccer Ball1。第二个指令积木块是移动角色到鼠标指针或者其他角色位置,小明移动到足球位置,单击下拉按钮,选择足球即可,如图2-13所示。需要注意的是,使用“面向××”这个指令积木块,角色在移动时是面向当前方向进行移动的。
图2-12 小明移动到足球的方法一
图2-13 小明移动到足球的方法二
(4)运行效果。小明和足球的初始位置效果如图2-14所示。图2-15所示的是利用方法一小明移动到足球的效果,图2-16所示的是利用方法二小明移动到足球的效果。
图2-14 小明和足球的初始位置
图2-15 利用方法一小明移到足球处的效果
图2-16 利用方法二小明移到足球处的效果
以上两种方法都可以实现小明站在最初的位置跑向足球,这两种方法呈现出的结果会略有差别。
2.小明绕过障碍物跑向足球
(1)情景介绍:足球场上总是很热闹,小明在练习定点射门时,常常会碰到其他小朋友也在足球场做运动,他不能直接跑向足球,而是需要绕过小朋友或其他障碍物跑向足球处。
图2-17 小明绕过障碍物的路线图
(2)场景搭建:小明绕过其他角色跑向足球,此处需要在图2-14所示场景的基础上再添加一个新角色——小明的同学。从角色库的“人物”中选择名为“Kai”的人物,并修改名字为“小明的同学”。为实现小明绕过其同学跑向足球的过程,其前进的路线可为图2-17所示箭头所指的方向。
(3)脚本编写。
1)小明脚本的编写。这个过程利用的指令积木块是“面向××方向”和“移动××步”。“面向××方向”指令积木块使角色面向特定的方向(0°表示向上,90°表示向右,180°表示向下,-90°表示向左),方向通过下拉按钮进行选择,也可以进行输入设置。“移动××步”指令积木块使角色移动指定的步长,输入的数值为正表示向前移动,输入的数值为负表示向后移动。图2-18中的输入的数值都是编写脚本过程中测试得到的数值。为了更加清晰明了地显示小明的运动过程,可以使用控制模块中的“等待××秒”的指令积木块。这个指令积木块的意思是等待几秒后,再进行下一个动作。关于控制模块的内容将在第6章进行详细介绍。小明跑向足球的脚本如图2-18所示。为了在屏幕上显示出小明的方向,可以选中动作模块中的“方向”复选框,如图2-19所示。
图2-18 小明跑向足球的脚本
图2-19 显示方向设置
2)小明脚本分析。使用“面向××方向”指令积木块能将角色旋转到任意一个角度。如果只是要面向上、下、左、右方向,那么使用该积木块中的下拉菜单即可快速选择,至于其他的方向,则需要在该指令积木块的参数中指定。
在Scratch中,以角色自身中心位置为轴,可顺时针方向定义角色所面对方向的角度值,也可以逆时针定义角色所面对方向的角度值。如图2-20所示,如果按顺时针定义方向,角度值为正值,0°表示向上,90°表示向右,270°表示向左,180°表示向下;如果按逆时针定义方向,则角度值为负值,0°表示向上,-90°表示向左,-270°表示向右,-180°表示向下。
在Scratch中,角色的东、南、西、北和地理书中所讲的“上北、下南、左西、右东”所指的含义相同。例如,225°和-135°都指的是西南方向,如图2-20所示。
图2-20 Scratch中,旋转方向与度数的对应关系
3)小明运动的所有脚本。
小明通过不同的方法均可以踢到足球,从而使足球运动。为了帮助大家更加清晰明了地掌握小明在不同运动环境下所使用的不同脚本,这里对小明使用过的所有脚本进行了整理,如图2-21所示。
图2-21 小明运动的所有脚本
4)运行效果。
通过以上的脚本编写,实现了小明绕过同学跑向足球的过程,等待1秒前的位置如图2-22所示,等待1秒后到达的位置如图2-23所示。
图2-22 小明等待一秒前
图2-23 小明等待一秒后
3.足球的运动
下面介绍一下足球是如何旋转着进入球门的。
(1)情景介绍:在小明跑向足球时,将足球看成定点。当小明踢到足球后,小明停下来,而足球开始运动,这时足球变成了动点,小明则是定点。
(2)场景搭建:小明将足球踢出后,足球便会运动。运动的足球可以分成两个状态,即原地旋转和前行之后旋转减弱。
(3)脚本编写。
1)足球原地旋转。足球旋转需要用到动作模块中与旋转相关的指令积木块。如果足球按照一个度数持续转动就会呈现出旋转的效果,保持持续的动作会涉及控制模块中的“重复执行××次”指令积木块。该指令积木块的意思是在执行下一个指令前重复特定次数指令积木块内部的指令。当小明刚踢到足球时,由于作用在球上的力很大,因此球会转得很快。
利用“重复执行”和“向右旋转90°”指令积木块便可呈现出足球旋转的效果,脚本如图2-24所示。为了更加清楚地看到足球旋转的效果,可以改变旋转的度数为180°,并且添加了每旋转180°移动1步,脚本如图2-25所示。
图2-24 足球原地慢速旋转
图2-25 足球原地快速旋转
2)足球进入球门。足球进入球门,并不会马上停止下来,还有一个原地旋转的过程。足球如何进到球门里面,一种解决办法是知道球门在舞台上的确切坐标位置,但是这个坐标位置应该是有范围的,因为球门是有面积的,并不是一个点;还有一种解决办法是利用“移到××”指令积木块。该指令积木块可以让角色移到鼠标指针或其他角色的位置,所以当程序运行时,让鼠标指针落在球门范围内,足球就会移到球门里了,脚本如图2-26所示。足球进入到球门后,在将要停止时移动速度和旋转角度会变慢,所以旋转度数设置的值可以小一些,设置足球向右旋转的值为15°,脚本如图2-27所示。
图2-26 射门足球
图2-27 足球射门后至停止
3)足球的所有脚本。
在足球的整个运动过程中,足球应用到的所有脚本如图2-28所示。
图2-28 足球的所有脚本
4.运行效果
小明刚踢到足球时,足球会旋转(见图2-29),然后将鼠标移到球门范围内,足球被射进了球门,如图2-30所示。
图2-29 足球原地旋转
图2-30 足球被射进球门