———— / 作品赏析 / ————
之前在18讲的时候,有给大家做了一个作品赏析,后来有学员提出来,想了解这个程序怎么做的,那么今天CC哥在这里给大家专门讲一下这个小程序。(本游戏代码来自官网,非原创)
这个小游戏并不难,就是用一个空格键操作,按住空格键不放,冰激凌就变大,松手,冰激凌就落下来,每次放的冰激凌球必须比上一个小,否则冰激凌塔就会倒下来。程序虽然不难,但是美工和创意,尤其是所有的细节都是很不错的,下面CC哥带大家一起欣赏一下。
程序的逻辑不复杂,那么咱们就按照执行的步骤一步一步来看啦。
首先先看看有几个角色,每个角色有几个造型。
程序一共有5个角色,第一个肯定是冰激凌的球了,第二个是冰激凌筒,第三个是游戏字幕,第四个是开场图片,第五个是用来选择游戏难度的。
这是个日本人做的游戏,CC哥不懂日文,所以大家以后没事写程序如果要走国际路线,一定要用英文哦,否则复杂的游戏实在没法看哦
1:先从开场画面看起吧:
这是游戏的封面,停留0.5秒就逐渐消失。脚本也很简单:
2:显示游戏菜单
这个游戏菜单涉及了两个角色,一个是游戏的文字角色,一个是small,medium,large的按钮菜单。
文字这个角色主要是用来控制在不同的时刻显示不同的背景文字。这角色的代码除了处理好文字的显示和隐藏,同时还处理了游戏结束之后的得分显示部分,代码后面再提。
重点讲一下按钮的代码。
虽然有三个按钮,但是只用了一个角色,克隆的技巧。同时这里面还用了一个私有变量的技巧,就是其中***ID这个变量是个只属于本角色的变量。(变量也用日本字)。
私有变量的用法,是在每次克隆完,都会对私有变量进行重新赋值,那么也就是每一个克隆体的私有变量的值都是不同的。当我们在进行侦测时,比如当角色被点击这个事件所对应的代码中,我们就可以用这个不同的变量值来对应不同的操作。在这个程序里,不同的私有变量值就对应了不同的冰激凌筒的大小。
这个ID乘以50+150就是冰激凌筒的大小。
3:选择冰激凌筒的大小后显示:
我们看一下冰激凌筒的代码和造型:
当程序开始时,把冰激凌筒隐藏起来,造型显示冰激凌筒的造型。当收到开始的消息的时候,把筒的大小设置成根据之前按钮算出来的大小,加个10的目的是为了筒比最大的冰激凌球还要大一点吧。(这个程序员好细致)
最厉害的就是最下面这段代码!让CC哥也佩服不已!
不得不说,多看一些程序是能学到一些窍门。这段代码的目标很简单,就是处理当冰激凌多的时候冰激凌筒下移的过程。
看出神奇了没?有没有注意到冰激凌筒慢慢的彻底下移到了屏幕之外?!CC哥看到这里差点没一口血喷出来!我做了这么多程序,一直没有办法让一个角色完全移除屏幕之外!这个哥们怎么实现的?!
仔细阅读了这个兄弟的程序,原来技巧在这里。他在角色下降的过程中不断地切换角色造型,然后就实现了这个下移出屏幕的效果。同时下移的过程只显示筒的造型,而且没有造型切换的闪烁。 为此CC哥马上用Scratch3来做了验证。事实上确实可行。
正常来讲,如果只是单纯的通过降低y的坐标来下移角色,不论如何做,不论你的角色造型初始位置放的如何靠下,在下移到一定程度后,角色总留一部分在屏幕上没法完全下移到屏幕外。但是如果你用了这位兄弟的方法,就可行了!大家自己试试。当然,也不是无限下移的,大家需要调节一下角色的大小和在造型里的初始位置。至于是什么原理,CC哥也没看Scratch的源代码,所以不知道bug出在哪里。反正大家掌握这个小技巧就OK啦!
4:制作冰激凌
这个游戏的输赢的关键就是每次制作的冰激凌球一定要比上一个小一点,这样才能叠上去,如果一旦比上一个球大,那么就会跌落下来,游戏也就结束了。制作冰激凌的代码都在冰激凌的角色里。
冰激凌的代码很多,我们一部分一部分来看:
冰激凌一个一个往下落也是才用了克隆的技巧。
‘’克隆OK?‘’这个变量是用来判断一个冰激凌处理的过程是否结束。如果这个变量等于1,才准许克隆操作,也就是准许开始下一个冰激凌球的制作过程。另外‘’克隆‘’这个变量是角色的私有变量,程序里设置这个变量主要是想区分克隆体与本体的区别,也就是在执行某些操作的时候,只会涉及到克隆体,而不会涉及到本体。(在scratch里面经常用一些变量来表示状态,通过状态的判断来控制程序的运行路径或执行对象的选择)
克隆体启动的代码(分步看):
这部分是任意选一个冰激凌的造型,然后显示出来,同时把“克隆ok?”的变量设置为0,表明一个冰激凌球的制作过程开始。在没有处理完成前禁止再克隆新的冰激凌球。
同时在按下空格键前停止所有操作,一直等待你按下空格键。
这段代码就是空格键按下的过程,也就是关键的制作冰激凌球大小的过程,我们知道,如果你按的时间太长,冰激凌大小大于上一个球的大小,游戏就会输了。如果你按的太短,球太小,那么后面的冰激凌就不好做了。
第一个球的时候需要做个判断,判断筒的大小,如果是大号,就是球不能超过300,如果是小的,球不能超过200。如果不是第一个球,那么统一最大不能超过300.
把球的大小值存下来(这个大小是角色的私有变量,也就是克隆体的大小,每一个克隆体都是不一样的),同时让球往下落,在碰到黑色的时候停止下落。(注意下所有的角色都有一层黑色的边,这不光是为了好看,而是关键用来做碰撞判断的。)
这段程序是指当第一个球落下时,并不是碰到冰激凌筒就停止,而是要继续下落一段距离,让球落入到筒里一部分。
这部分程序是判断如果当前做的冰激凌球比上一个的大小,如果比上一个大,那么就开始了掉落筒外的程序:
掉落前先开始在顶端做来回晃动。
这是一段跌落程序,球向右侧跌落。跌落的过程还是用了前面讲的技巧,让球能够完全跌落到屏幕之外。同时通过”y移动”这个变量,让球跌落的速度逐步加快。跌落的过程x方向不断的向右匀速移动。
跌落完毕后,就发布了“游戏结束”的消息。(我查了翻译)
如果球没有上一个大,那么就将球数增加1,把这个球的大小记录下来,做下一次比较用。
先对冰激凌的高度做个判断,如果球的位置有点高了,那么就整个冰激凌都向下移动。(下移通过广播“下移”来实现)如果高度还够用,那么就将克隆ok?的变量设定为1,开始下一个球的制作过程。
下移过程
冰激凌下移的过程,先检测是否是克隆体,如果是克隆体再进行下移操作(本体不下移)。下移的过程也是用了前面的技巧,确保每一个冰激凌都移到屏幕之外再消失。移动结束后,再将“克隆ok”的变量设定成1,准许制作下一个冰激凌球。
关于最后一个角色,显示文本和得分的角色,我就不介绍了,相对简单,大家自己看吧。
今天的分享内容结束了。