初级篇——小狗追星星
【疑惑篇】
点击绿旗按钮,让星星跟随鼠标移动,小狗不停的追逐星星。
想一想: 可以有几种方式实现?如何调整小狗追逐的速度?
【线索篇】
案例分析
它们发生的场景是什么?
每个场景中有哪些角色?
每个场景中的每个角色在做什么?
星星
- 点击绿旗按钮,移动到鼠标的位置。
- 鼠标位置改变,移动到鼠标的新位置。
- 重复第2步。
小狗
- 点击绿旗按钮,朝向星星移动。
- 跟随星星的位置改变,朝向星星的新位置移动。
- 重复第2步。
积木提示
注意事项
- 小狗移动时不能颠倒
- 通过修改移动积木的参数,改变小狗的移动速度
【解决篇】
在这个案例中,星星会在舞台上跟随着鼠标指针移动,小狗又会跟随着星星移动。现在我们就一起来完成它。
首先还是新建一个项目,添加案例中的背景Desert。
接着,把默认的小猫删掉,在把两个用到的角色Dog1和Star添加进来。可以通过上个案例中教你的小技巧快速搜索。
接下来,就开始通过指令块来控制角色的操作。在这个案例中用到两个角色,你可以一个一个的实现它们。
角色:Star
1.点击绿旗按钮,移动到鼠标的位置。
同样的,首先考虑我们的指令串通过什么事件来启动。在这里用到的还是当绿旗被点击事件积木。
点击绿旗以后,星星需要移动到鼠标的位置。如何实现它呢?
这里有两种实现方式。
第一种,获取到鼠标的在舞台中的坐标值,再使用移到x:(0) y:(0)积木将它移动到与鼠标坐标值一样的位置。
如何获取鼠标在舞台中的x坐标和y坐标?
你可以去侦测分类中找一找,会发现有一个鼠标的x坐标积木和一个鼠标的y坐标积木。将它们拖入编程区中点击一下,在积木的下面会出现一个数字,它就是当前所点积木的返回值,在这里数字就表示鼠标当前的x坐标和y坐标。
注意观察这两个积木的形状是椭圆形,正好与移到x:(0) y:(0)积木的参数形状一致,所以你可以将它们放入移到x:(0) y:(0)积木的参数框中,作为该积木的参数使用。
这样,当你点击绿旗按钮后,星星就会移到鼠标的位置。除了使用移到x:(0) y:(0)积木,你可以找找看,还有没有其他移动积木可以将鼠标的x坐标积木和鼠标的y坐标积木作为参数使用。
第二种实现形式,在运动分类中有一个移到([随机位置])积木。它的参数有几种选项,分别是随机位置、鼠标指针和其他角色的名称。当你选择鼠标指针时,星星就会自己移动到鼠标指针的坐标位置。
它的效果等同于第一种实现方式。你可以将它想象为,移到([随机位置])积木会自动帮助你获取鼠标指针的x和y坐标,然后将星星移动过去。
2.鼠标位置改变,移动到鼠标的新位置。
这一步实际上和第一步一样,当鼠标坐标改变后,你需要重新获取它的坐标值,将星星移动到新的位置。
3.重复第2步。
还记不记得,指令是从上至下依次运行的,并且每个指令只会运行一次。当你完成之前两步,点击绿旗按钮后,你会发现星星移动到一个地方后就不会动了。这是因为程序开始执行后,你使用的2个移到([随机位置])积木一瞬间就会执行完成。为了保证星星能不停的跟随鼠标指针移动,你需要在指令串后面不断的增加移到([随机位置])积木。
这里是不是与上一个案例,让小鱼不停的游动很类似。你只需要使用重复执行积木,将之前的移到([随机位置])积木放入它的大嘴中。当你再点击绿旗按钮后,星星就会不停的跟随鼠标指针移动了。
实现了星星的操作,接下来就该轮到小狗了。
角色:Dog1
1.点击绿旗按钮,朝向星星移动。
小狗的操作跟星星很类似,区别是你可以在舞台上看见它移动的过程。
首先还是使用当绿旗被点击事件积木来启动指令串。
接着,为了看见小狗移动的过程,你是不是会想到使用在(1)秒内滑行到x:(0) y:(0) 积木。这里的坐标值应该填多少呢?是不是应该填入星星的坐标值,或者你同样可以填入鼠标的坐标值,因为它们两个是相等的。
与移到([随机位置])积木类似,在运动分类中也有一个在(1)秒内滑行到([随机位置])积木,它的参数同样有几种选项,分别是随机位置、鼠标指针和其他角色的名称。当你选择鼠标指针或者Star(星星角色的名称)时,小狗就会自己滑行到鼠标指针(星星)的坐标位置。
点击绿旗按钮你会发现有一个问题,无论星星在哪里,小狗在追星星的过程中,方向都不会改变。如何解决呢?
既然小狗是追着星星走,它的方向应该是朝着星星所在的方向,在运动分类中有一个面向([鼠标指针])积木,它的参数有2种选项,分别是鼠标指针和其他角色的名称。在这里你可以选择鼠标指针或者Star(星星角色的名称),小狗就会将属性方向值调整为星星所在的方向。再将该积木放在滑行积木的前面,让小狗可以先调整方向,再开始滑行。
需要注意的是,为了避免小狗向左滑行时出现上下颠倒的情况,你还是得在调整方向之前,使用将旋转方式设为[左右翻转]积木将小狗的旋转模式调整为左右翻转。
2.跟随星星的位置改变,朝向星星的新位置移动。
3.重复第2步。
与星星的第2、3步类似,为了让小狗也能够不停的追赶星星,你同样需要使用重复执行积木,让小狗不停的调整方向,再向星星的位置滑行。
好了,点击绿旗按钮进行测试。现在当你的鼠标移动后,星星会跟随着鼠标位置移动,小狗又会跟随着星星的位置滑动。
注意观察,目前小狗的滑动过程会有两个问题。
第一个问题是,因为小狗每次滑行的距离是不一样的,而滑行的时间都是1秒钟,就会出现有时快、有时慢的情况。
第二个问题是,在小狗滑行的过程中,如果星星的位置发生了改变,它并不会立即朝着星星的新位置滑行。这是因为在(1)秒内滑行到([随机位置])积木开始执行时,会先确定一个滑行的终点坐标值,也就是此时星星的位置。接着积木会执行1秒钟,小狗滑行到之前确定的终点坐标位置。接下来,因为有重复执行积木,它又会重新开始执行,这时才会重新确定新的星星坐标值。
有没有什么方法可以让小狗随时跟随着星星移动呢?
其实很简单,将在(1)秒内滑行到([随机位置])积木替换为移动(10)步积木就可以了。
上个案例中我们提到过,移动(10)步积木会朝着角色的属性方向值方向移动,并且它执行的速度非常快。每当小狗移动10步之后,就会重新调整方向值面向星星的新位置,接着朝着它又移动10步。最终看上去的效果,就像是小狗不停的在追着星星跑。
完成案例后,你还可以自己尝试着修改小狗移动积木的参数,看看数字变化后,小狗的速度会有什么改变。
想看更多学习案例,欢迎点击查看《Scratch 3学习手册》open in new window
想要获取所有案例源码和素材,以及获得我对你在学习中所遇问题的一对一解答,欢迎加入石头解忧杂货店。