[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第150讲。
飞驰的高铁,本题是2023年8月20日举行的第15届蓝桥杯STEMA测评Scratch编程中级组编程第2题,题目要求编程实现模拟高铁飞驰前进的效果。当按下数字1时,画面中的景色持续向左侧水平移动,再按下数字2,停止程序。
先来看看题目的要求吧。
编程实现:
飞驰的高铁。
具体要求:
1). 点击绿旗,角色、背景如图所示;
2). 按下一次数字1按键之后,画面中的景色持续向左侧水平移动(参照程序演示视频);
3). 按下一次数字2按键之后,程序结束。
评判标准:
5分:满足"具体要求"中的1);
25分:满足"具体要求"中的2);
10分:满足"具体要求"中的3)。
本题包含两个角色,分别是高铁和景色,如图所示:
其中,景色角色的造型如下:
本题考查的知识点是运动编程,具体来说是无限滚动效果。
什么是无限滚动呢,在Scratch中通常是指一个角色沿着某个方向移动,永不停止。其关键在于,该角色在运动方向上始终占满舞台,角色的长度好像是无限长一样。
如果你仔细观察作品效果的话,会发现高铁角色自始至终都是不动的,真正移动的是景色。景色从右至左无限滚动,看起来就好像是高铁一直向右运动,这就是物理学中的相对运动。
针对无限滚动,我们通常可以使用如下两种解决方案:
复制方案
克隆方案
为了方便描述,以本题的效果为例,分别介绍两种方案的实现思路。
复制方案的思路是:先确保一个景色角色(角色1)重复向左移动,当移动到舞台的最左边时,立刻回到舞台的最右边。然后再复制一个景色角色(角色2),只需要调整其初始位置,使其紧紧跟随在角色1的后面即可。
克隆方案的思路则是:景色的本体向左移动,当本体的最右侧即将露白(右侧即将离开舞台右边缘)时,立刻克隆一个景色,让其跟随在本体的后面向左移动。克隆体的最右侧即将露白时,再次克隆一个景色。同时需要注意,当本体到达舞台左边缘后需要隐藏起来,克隆体达到舞台左边缘后则需要删除,然后不停地重复此过程即可。
接下来,我们进入具体的编程实现环节。
根据上面的思路分析,我们分别使用两种方案来编写程序:
复制方案
克隆方案
1. 复制方案
我们可以分角色来编写代码。
1). 高铁角色
首先来编写高铁角色的程序,高铁角色需要设置好坐标和层次关系,这一步非常简单,代码如下:
其次,运动是在按下数字1后才开始,按下数字2则结束程序。需要注意的是,这里的按键只需要按下1次,不需要反复按下,针对这种情况, 最好的方法是使用“等待条件”指令。
为了方便控制,可以将这部分代码写在高铁角色中,增加代码如下:
代码比较简单,当按下数字1键后,发送了一个“开始”的广播消息,在按下数字2键后,直接停止全部脚本。
连续使用两个“等待条件“的好处还在于,可以精确控制按键的顺序,必须是先按1键让景色动起来,然后才能按2键停止运动。
2). 景色角色
绿旗点击时,景色是静止的,需要设置好其位置,注意要确保覆盖整个舞台,代码如下:
当接收到“开始”广播后,重复执行向左移动,当移动到最左边时,立刻又回到舞台的最右边,代码如下:
需要注意,不同的角色大小,到达舞台左边时的左边也不相同,角色越大,到达舞台最左边时的x坐标就越小,那怎么确定这个最小坐标呢?
超平老师告诉你一个小技巧,将上面代码中的如果部分先不写,执行代码,当角色停下来时的那个坐标就是最小坐标了,简单吧。
3). 复制角色
接下来,只需要再复制一个景色角色即可,如图:
然后修改角色的起始x坐标即可,代码如下:
温馨提示:很多同学喜欢一上来就复制景色,然后再分别写代码,这是可以的,但很显然效率不高,而且容易出错。最好的方式是先写好一个角色,然后再复制角色,此时,只需要修改一个地方即可,又快又好。
2. 克隆方案
对于克隆方案,高铁角色和复制方案的代码基本一样,可以先不动。重点在于景色景色,需要分两步来编写。
1). 景色本体
绿旗点击时,我们设置好景色本体的位置如下:
注意,这里的x值为118,刚好是角色左边盖住舞台左边缘的位置,由于后续需要隐藏本体,所以必须使用”显示“指令,将其显示出来。
当按下数字1键,也就是接收到”开始“的广播消息后,本体开始向左移动,直到最左边隐藏起来。同时需要判断,当本体右侧即将露白时,需要克隆一个景色,代码如下:
代码中的难点在于克隆的时机判断,这里使用的是”x坐标 = -122“,这里有两个关键点:
①. 由于只能克隆一个,所以不能使用 "<" 指令,否则就会克隆大量的景色;
②. 这里的-122和x坐标增加的值有关系,必须确保x坐标的值在变化过程中,能等于-122,所以不同的移动速度,其值也相应的有所不同,你需要自己计算并测试。
2). 景色克隆体
一旦生成了克隆体,就需要让克隆体从舞台的最右方开始向左移动,左移的逻辑和本体基本一致,代码如下:
由于使用的是克隆体,一旦停止全部脚本,克隆体就会删除,会出现露白的效果,如下:
所以,这里需要改变结束程序的方式,不能直接使用暴力的”停止全部脚本“了,而是改为广播消息,将高铁角色的角色修改如下:
相应的,在景色角色中,添加代码如下:
如此一来,既可以确保结束程序,又不会出现露白的尴尬场景,岂不妙哉。实际上,在平时的Scratch创作中,经常会出现这种情形,我们要学会使用广播结合”停止该角色的其他脚本“指令来实现,而不是直接使用”全部结束“指令暴力解决。
这样就可以实现无限滚动的效果了,你可以简单的理解为,一张景色图片从右向左移动直到舞台最左边缘(不是碰到舞台边缘,而是最右侧到达舞台最左边缘)消失,然后又出来一张景色图片重复这个过程,有点前赴后继的味道。
至此,整个作品就创作好了,赶紧乘坐我们的高铁,体验一下飞驰的感觉,欣赏一路的风景吧。
本题是中级组编程部分第2题,分数为40分,积木块数量30个左右,涉及到的知识点主要包括:
运动编程,重点是坐标的灵活运用;
循环编程,包括无限循环和条件循环;
按键的判断和灵活处理;
事件广播机制;
克隆编程;
停止脚本的不同方式及其区别;
这是中级组的第2题,题目难度中等,完成时间在15分钟左右,难点在于如何实现景色的无限滚动。
无限滚动是Scratch编程中常用的编程技巧,很多经典游戏中都运用了无限滚动,比如飞扬的小鸟、飞机大战和极速赛车等。
留给你一个小小的思考题,本作品中提到的两种方案,哪一种效果更好,为什么呢?
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香
需要素材和源码的,可以移步至“超平的编程课”gzh,或者私信本人。