初级篇——电子时钟

【疑惑篇】

点击绿旗按钮,舞台中显示当前日期、星期和时间。

视频演示open in new window

亲自操作open in new window

想一想: 尝试着更换不同的时间格式,例如xxxx年xx月xx日 xx时xx分xx秒

【线索篇】

案例分析

它们发生的场景是什么?

默认背景

每个场景中有哪些角色?

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

  1. 点击绿旗,舞台中显示当前的日期、时间和星期
  2. 舞台中的时间会跟随现实中时间改变

积木提示

当绿旗被点击

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

换成([造型1])造型

重复执行

当前时间的[年]

大于

小于

等于

(苹果)的第(1)个字符

(苹果)的字符数

注意事项

  1. 日期、时间、星期是一个角色,还是多个角色,或者是多个造型?

【解决篇】

如何在舞台上展示一个可以实时变动的时钟?要完成这个工作,需要思考两个问题。

第一,如何实时获取当前的时间?

第二,如何将获取到的时间在舞台上展示出来?

第一个问题很好解决,还记不记得我们在交朋友open in new window中如何判断玩家还有多久过生日?只要使用侦测分类中的当前时间的[年]积木,就可以获取到代表当前时间的数字。

获取到当前时间之后如何将它们展示出来呢?

最简单的方式是不是利用连接(苹果 )和(香蕉)积木,将日期和时间拼接成一句话,让角色说出来就行。

在这个案例中,我们没有让角色说出来,而是使用数字角色在舞台表示时间。接下来,我们就来一步一步实现它。

第一步,添加背景。

在这个案例中使用的是默认的白色背景,所以不需要做更改。

第二步,添加角色。

这一步也是这个案例的重点和难点所在。你在舞台中看见的这些数字是一个角色、多个角色、还是多个造型?

在使用当前时间的[年]积木时,根据所选参数不同,会返回代表不同时间的数字。例如,参数选择年,会返回代表年份的数字,参数选择月,会返回代表月份的数字等等。

在这里最容易想到的方法,就是将不同参数(年月日星期时分秒)分别作为一个角色,接着每个角色再用不同的造型与返回的数字一一对应。

例如年角色,每个造型代表一个年份,如果你要制作能运行10年的时钟,只需要十个造型代表十个年份。月日时分秒星期的造型数量都是固定的,月份每年12个月,需要12个造型。日期每月最多31天,需要31个造型。时每天24小时,需要24个造型。分秒都是60个造型,星期每周有7天,需要7个造型。

这样,每个角色根据当前时间的[年]积木返回的数字,就可以切换为对应的造型,在舞台中显示。

为了方便切换,你可以将当前时间的[年]积木返回的数字与每个角色的造型编号对应起来使用。

在这里你会遇到一个问题,代表年的数字与造型编号无法对应,或许你会想到修改造型名称与它对应。如果你像我上图一样,将造型名称修改为代表年份数字,然后像下图这样试图自动切换造型,你会发现切换的年份可能不正确。

例如,我在年角色中创建了2022~2030九个造型,当使用上面的方式切换造型时,舞台中显示的2027年。为什么会这样?

因为当你向换成([造型1])造型积木中传入的参数是一个数字时,它会使用造型编号进行匹配。例如传入参数1,就会切换为造型编号为1的造型。传入参数9,就会切换为造型编号为9的造型。当传入参数10时,因为我的角色总共只有9个造型,并没有编号10,此时Scratch会像使用下一个造型一样,重新返回造型1开始计数。所以传入参数10,会切换为造型编号为1的造型,传入参数2022,就会切换为造型编号6的造型,也就是参数除以造型数量的余数(2022%9=6)。

如何解决这个问题?一个简单的方法就是不要向换成([造型1])造型积木中传入数字,而是传入一个包含文字的字符串,这样该积木就会使用造型名称进行匹配。

例如,在年角色每个造型的名称中加一个“年”字,然后在像下图这样切换造型。

其他几个角色因为返回的数字和造型编号可以一一对应,不会有年角色的切换问题,可以直接使用前面说的方式进行切换。

现在舞台上只有代表时间的数字,还缺少“年”、“月”、“日”或者“.”、“:”这样的说明文字,它们应该如何加上去?

在这里你可以用很多不同的处理方法。

如果你的电子时钟的位置是固定不变的,你可以利用绘图工具,在舞台背景上直接将它们写出来。

或者你可以在每个角色的造型后面添加上说明性的文字。例如在年角色每个造型的数字后面加上“年”字或“.”,在时角色每个造型的数字后面加上“时”或者“:”。

或者你还可以把它们也作为单独的角色,移动到对应的位置上。

现在时间已经可以正常的展示出来,还剩下最后一个问题,舞台上的时间需要够根据现实时间动态的更新。如何完成它?

很简单,你只需要在点击绿旗按钮后,让每个角色重复不停的去获取当前时间,切换到对应的造型就可以了。

这样你就完成了电子时钟的制作,但是除了上面这种实现方式之外,你还能想到别的展示时间的方法吗?

注意观察舞台上的时间,不论是年月日时分秒,它们都是由0~9这十个数字所组成。只是年角色有4个数字组成,月日时分秒都有2个数字组成,因此你还可以把这些角色进一步拆分,将年角色分为年1、年2、年3、年4这四个角色,月日时分秒都分为两个角色,这样每个角色都只需要0~9十种造型就可以了。

此时你同样可以绘制数字,或者在网上搜索一些更好看的数字图片使用。同样的,你可以加入我的知识星球下载我在案例中使用的图片和声音素材。

接下来的问题是,如何将当前时间的[年]积木返回的数字也进行拆分,对应到每个角色身上?

有没有想到运算分类中的(苹果)的第(1)个字符积木,它可以拿到参数字符串中不同位置的字符。

例如,参数是代表年份的2022时,第1个字符就是2,第2个字符就是0,第3和第4个字符也是2。

这样每个角色就可以通过拿到的不同位置的数字,切换为对应的数字造型。例如,年1角色就像下图这样。

月日时分秒角色在获取不同位置的数字时会遇到一个问题,当前时间的[年]积木返回的数字可能是个位数,也可能是两位数。

因此,月日时分秒的角色1在获取数字时需要进行判断,如果当前时间的[年]积木返回的数字只有一个字符,或者返回的数字小于10,该角色就需要切换为数字0的造型。

如果当前时间的[年]积木返回的数字有两个字符,或者返回的数字大于10,该角色就需要切换为第1个字符对应的造型。

同样的,它们的角色2也需要做类似的判断。如果返回的数字只有1个字符,或者返回的数字小于10,该角色就切换为数字对应的造型。如果返回的数字有2个字符,或者返回的数字大于10,该角色就切换为第2个字符对应的造型。

这样一来,你就只使用了十个数字造型实现了电子时钟。

和之前的方式相比,这种实现方法不需要多余的造型就可以显示任意年份。相对的,角色的数量比之前更多。

在接下来的学习中,等你学会控制分类的克隆或者画笔分类的图章积木之后,可以再试着将多个角色进行合并,只使用一个角色来实现电子时钟。

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

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