初级篇——小猫跑垒

【疑惑篇】

点击绿旗按钮,让小猫沿着箭头方向,从本垒开始,跑向一垒、二垒、三垒,再回到本垒。

视频演示open in new window

亲自操作open in new window

想一想: 如果不用看见两垒之间的移动过程,可以有几种方式实现?

视频演示open in new window

亲自操作open in new window

【线索篇】

案例分析

它们发生的场景是什么?

每个场景中有哪些角色?

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

  1. 点击绿旗按钮,站在本垒位置
  2. 移动至一垒
  3. 移动至二垒
  4. 移动至三垒
  5. 移动至本垒

积木提示

当绿旗被点击

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

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

【解决篇】

在开始制作这个动画之前,我想请你先思考一个问题,什么是运动?

当小猫站在舞台上,位置没有发生任何改变时,它是运动还是静止的?

当小猫站在舞台上,在一段时间内,位置发生了改变时,它是运动还是静止的?

从上面这两个例子,你是不是可以很容易的分辨出来。在一段时间内,当一个角色在舞台上的位置发生变化时,我们就说这个角色是在运动。

还记不记得在上一个练习中,角色的位置是由什么决定?答案是,角色在舞台上的属性坐标值

所以说,如果在一段时间内,角色的坐标发生了改变,角色就在运动。

接下来,我们就开始让小猫在棒球场上动起来。

和上一个练习一样,首先你需要把用到的背景和角色添加进来。小猫角色默认就有,为了熟悉Scratch的操作,你同样可以先将它删除,再重新添加进来。

在上一个练习中,你是通过手动修改角色的属性坐标值让它改变位置。这一次,就需要你使用积木块来完成它。

可能这是你第一次使用积木块,我先来告诉你,积木块是做什么用?

想象一下,假设舞台的棒球场上,有很多能够听懂你说话的机器人正站在本垒区中。如果你需要让它们跑到一垒区,应该怎么控制它们?

你会不会对它们说,“跑到一垒区”。如果这些机器人很智能,知道一垒区是什么,它也许就能跑过去。但是现在舞台上的机器还没有足够的智能,它不能理解“跑到一垒区”是什么意思,需要你重新给它们一些更清晰的指令。

也许你会换成这样的指令,“跑到最上面的白色方块去”,这时候聪明的机器人已经知道你说的白色方块是什么,但是还有很多不智能的机器人,还是不知道白色方块是什么。它们会告诉你,“我不知道白色方块在哪里,我只认识舞台上的坐标位置”。

听了它们的回答,你是不是又有了新主意。这次你可以说,“跑到坐标为(x:-17,y:41)的位置”。这一次大部分机器人都能听懂你说的位置在哪里了,它们开始各自往你说的坐标跑去。但是它们有的跑的很快,有的跑的很慢,你如果想让它们整整齐齐的一起跑过去应该怎么办?

你可以说“在1秒钟内跑到(x:-17,y:41)的坐标位置”,这一次你给它们规定了时间限制,它们终于能整齐划一的跑到目标位置。

在上面整个过程中,你对机器人说的每一句话就是一个指令,机器人听见指令后,就会按照指令的要求开始行动。

类似的,在Scratch中每一个积木块就是一条指令,它们可以用来控制角色完成不同的任务。

例如,你现在需要让小猫跑到一垒区,你可以尝试一下运动分类中的指令,看看哪些可以完成这个任务?

好了,我们目标是让小猫从本垒区跑到一垒区,这个过程是不是想让小猫运动起来?

刚刚说了,运动就是在一段时间内让角色的坐标发生改变,因此你只需要通过积木块改变角色的坐标就能实现。你可以看见,在Scratch中有很多可以修改坐标值x和y的积木块。

注意观察,这些积木块的上都有一个或多个椭圆形,有的椭圆形中是数字,有的中是文字,文字旁边还有个向下的三角形图标,它们叫做指令参数。你可以将指令想象为一个数学公式,例如加法公式a+b=c,参数就是这个公式中的a和b,它可以代表任意两个数字,当你使用的不同的数字时,就可以计算出不同的答案。同样的,你可以修改指令参数,指令就会实现不同的效果。

例如,运动分类中的第一个移动(10)步积木,它可以让角色移动10步,当你将参数10修改成100时,角色就会移动100步。

在这个案例中,你可以尝试使用在(1)秒内滑行到x:(0) y:(0)积木。它可以让角色从当前坐标位置,在设置的时间内,移动到积木中设置的新坐标位置,并且你可以看见整个移动的过程。

例如,我们现在就来让小猫移动。你将小猫先拖动到本垒区,接着将在(1)秒内滑行到x:(0) y:(0)积木拖入编程区中,移动的时间设置为默认的1秒,移动的坐标设置成一垒区的坐标值(x:-17,y:41)。

接着,点击一下编程区的积木块,你会发现小猫将在1秒钟内,从本垒区滑行到一垒区。

接下来,如何让小猫从一垒区跑到二垒区?是不是同样的方法,只是你需要把积木中的坐标值换成二垒区的坐标。

点击一下这个积木块,小猫又会在1秒内,从一垒区滑行到二垒区。

剩下的让小猫从二垒区移动到三垒区,再从三垒区回到本垒区是不是也是一样的操作。

在这里你会不会发现一个问题,每次你需要让小猫移动到下一个垒区的时候,就需要修改一下积木块中的坐标值。每点击一次积木块,小猫只会移动一次。如果你需要让小猫自动绕着4个垒区转一圈,应该怎么办?

既然使用一个在(1)秒内滑行到x:(0) y:(0)积木可以让小猫滑行到一个目标位置,现在需要让小猫跑到4个垒区,是不是使用4个积木块就可以了?

不过需要注意的是,小猫在跑垒的过程中会有先后顺序,所以这4个积木块在执行的时候也必须有先后顺序。

幸运的是,多个指令执行的过程,就是按照它们排列的顺序,依次执行。

Scratch中的指令是如何排列呢?

很简单,只需要将多个积木块上下拼接在一起,组成一组指令串。Scratch程序就会从上至下,按照顺序依次执行。

现在你就可以拖动4个积木块到编程区,将它们拼接在一起,从上至下第一个积木设置一垒区坐标,第二个积木设置二垒区坐标,第三个积木设置三垒区坐标,第四个积木设置本垒区坐标。

接下来,点击这4个拼接在一起的积木块,你会发现小猫将从本垒开始,跑向一垒、二垒、三垒,再回到本垒。

看上去我们小猫跑垒的程序已经制作的差不多了。通常,当你在Scratch中把程序制作完成,准备向别人做演示时,需要点击舞台上面的全屏按钮,在全屏视图中进行演示。

在全屏视图中,你会看不见编程区中的积木块,也没法去点击它们。此时,你要如何来执行你的程序?

注意看,在舞台的左上角有两个按钮,绿旗按钮和停止按钮。它们就像是两个控制程序的开关,绿旗按钮可以启动程序,停止按钮可以停止程序。

绿旗按钮需要配合当绿旗被点击积木使用。

当绿旗被点击积木属于事件分类。事件积木是程序启动器,需要放在指令串的最上面,并且一个指令串中只能使用一个事件积木。当某个事件的启动条件被满足时,事件积木就会开始执行。

例如,当绿旗被点击积木的启动条件就是,舞台上面的绿旗按钮被点击时,它就会开始执行。接着,拼接在它下面的其他积木块,就会按照顺序依次执行。

现在,你就可以在之前的在(1)秒内滑行到x:(0) y:(0)积木前面,添加一个当绿旗被点击积木。

添加之后,不论你是在默认视频或者全屏视图,只要你去点击舞台上面的绿旗按钮,小猫就会开始按照你编写的指令运动。

马上就要完成你的第一个Scratch动画了,现在的程序还有一个Bug,也就是程序异常

你可以尝试一下,你先点击绿旗按钮让小猫开始移动。当它移动到中间某个位置时,你点击停止按钮,小猫就会在当前位置停止下来。这时如果你重新点击绿旗按钮,你会发现它将从当前停止的位置开始向一垒滑动,而不是如我们所想的,从本垒开始,跑向一垒、二垒、三垒,再回到本垒。

怎么解决这个Bug呢?

其实很简单,你只需要让小猫在滑向一垒之前,先回到本垒的位置就可以了。最简单的方法,就是使用移到x:(0) y:(0)积木。

移到x:(0) y:(0)积木和在(1)秒内滑行到x:(0) y:(0)积木很类似,它可以让角色从当前位置移动到你所设置的坐标位置。

它们不同的是,使用移到x:(0) y:(0)积木时,角色就像是进行了瞬间移动,你看不见它移动的过程,只看见它直接出现在所设置的坐标位置。

好了,现在你就可以在当绿旗被点击积木后面添加一个移到x:(0) y:(0)积木,积木中的x和y值就是本垒的坐标值。现在无论小猫中途被停止在什么地方,只要你点击绿旗按钮后,小猫都会先移到本垒的坐标位置,然后再跑向一垒、二垒、三垒,围着球场转一圈。

案例结束,你完成了自己的第一个小程序,让小猫在棒球场上跑垒。完成以后别忘了给你的作品取一个名字,然后点击菜单栏中的文件——>保存到电脑,将你的作品保存到电脑上,方便以后打开使用。

在这个案例中,你学习了什么是运动?什么是指令?如何将多个指令拼接成一组指令串?指令串是如何执行的?此外还学习了几个指令(积木块)的用法。

回到文章开头【疑惑篇】中的想一想,如果不用看见两垒之间的移动过程,程序应该如何实现?又有几种不同的实现方式?你可以自己尝试着将它做出来。

在你动手之前,我再给你两个提示。

第一,试着通过积木块让小猫瞬移到各个垒区的坐标位置。

第二,因为瞬移的速度非常快,快到你将几个积木块拼接在一起也看不见小猫移动的过程。这时你需要让小猫每瞬移一次,就在原地等待1秒钟,然后再继续瞬移到下一个位置。如何让它原地等待?你可以去控制分类中找一找,看看哪个积木块可以帮上你的忙。

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

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

Last Updated:
Contributors: lanheixingkong