scratch如何制作炮塔(scratch制作经典坦克大战流程)
用scratch制作小游戏的时候,我没有写游戏需求,也没有画流程图。每次有想法,就直接上手做了,遇到问题,兵来将挡,水来土掩。
其实应该画交互流程图,尤其内容比较多的时候。在制作欢乐斗地主的时候,因为交互很多,所以到后期感觉很乱,而且出现了许多bug。
这期讲的不是欢乐斗地主,而且经典坦克大战的流程,制作过程中遇到的问题,以及一些小技巧。
先上一张图,因为时间问题,就制作了一个关卡,如果小伙伴们想完善,只需要在链表中添加砖块的坐标。
如果想现在体验一把,这是作品的链接,可以查看源码,下载素材。
将舞台场景分成13*13的方格,这是经典坦克大战的场景划分,老家位于底部中间的位置,在场景中的坐标为(x:0,y:-165),将老家大小调整成一个方格的大小,因为素材不同,大小设定也不同,我的素材,是将角色的大小设定为80。
2.添加黄色砖块
这是一块砖块?其实,这是由两块
这样的素材拼接在一起,为什么要这么做,后面会分析。
怎么添加呢,场景中那么多黄色砖块,难道要添加那么多个素材进来?使用过scratch的小伙伴脑海里都闪过两个字,克隆,是的,我们只需要添加一块
这样的素材进来,然后通过克隆,让场景中出现很多黄色砖块。
克隆多少次,克隆完了怎么放到对应的位置,这里需要用到数据模块中的列表,新建一个列表,取名一定要有意义,看到名字就知道这个列表的用途。
列表新建好了,需要将所有黄色砖块的坐标添加到列表中。添加坐标,可以封装在一个方法中,也就是更多模块中,新建功能块,取名,要有意义。新建功能块可以让代码清晰整洁。还可以右击定义模块,对其进行编辑,选项里面有添加一些参数,该功能块就可以重复使用,减少代码量。
功能块新建好,开始将黄色砖块坐标添加到列表中。我这里是一列一列的从底部向上添加,这样可以使用for循环,减少代码量。
这是添加坐标的部分代码(完整代码可在作品链接中下载),这里说说为什么要新建砖块长、砖块宽、底部员坐标这三个变量。其实它们是常量,至始至终它们没有改变过。那么,它们有存在的意义吗?
答案是有的,为什么?这需要问产品经理。当然,我们现在就是这游戏的产品经理。这三个变量,在添加坐标的时候,使用了近百次。突然,我们发现砖块长不是36,或者你想把场景中的砖块变小一些。你只需要改变这三个变量,而不需要去更改下面的上百行代码。
坐标添加好了,那么克隆的次数就知道了,也就是列表的长度。
为了统一化管理砖块,我们将本体隐藏,场景中的砖块都是克隆出来的。这里的编程是存放坐标x的列表,动员是存放坐标y的列表,它们是一一对应的。
3.添加白色砖块
和草丛
的操作和添加黄色砖块一样,以后想拓展更多的关卡,只需要改变这三个素材中的坐标列表。
4.添加坦克
(注意:在ps素材的时候,要将素材的前方改成面向右边,因为游戏中向前移动,是向右边移动)
这是我方坦克的位置代码,这里使用变量,仍然是为了砖块大小位置变化,坦克位置也随之变化。敌方坦克的添加方式和添加我方坦克一样。
5.添加子弹(我方的和敌方的,总共需要添加4个,注意区分开),这里添加一个球的素材,然后缩小。位置随便,因为它是随着坦克移动的。
添加代码
1.添加我方坦克代码
移动的步数,上下是砖块的宽,左右是砖块长的一半,和之前添加黄色砖块对应。
添加好之后,我们就可以操控我们的坦克。但坦克是不能穿过黄色砖块,白色砖块,老家,敌方坦克,和边缘。
在移动的后面加上判断,也就是当触碰到这些物体时,后退回来。
这段代码加在移动键的下面,可以实现坦克原地调整方向,代码里的“-90”,据上下左右键后面是不一样的。
添加好之后,我们又可以操控坦克,驰骋战场。测试发现,坦克有时会卡在一些地方,过不去。因为坦克太大,于是缩小,最后问题解决了,但坦克缩小得看不清。
这里说个小技巧,添加一个素材,作为坦克的移动,圆形素材是最好的选择,将坦克的代码复制到圆形素材中,圆形素材大小随便调整,但不能太小。将圆形素材的透明度设置成100(完全透明),坦克一直移动到圆形素材上,方向和圆形素材一致,坦克素材大小就可以随便调整了。这个小技巧可以解决带有棱角素材的碰撞问题。
这是坦克中的代码,角色可以移动 是圆形素材中广播出的消息,每次按上下左右键,圆形素材成功移动之后,会广播这个消息。如果使用永远重复,会很浪费资源。
我方坦克还会和什么发生碰撞?对的,还有敌方子弹。碰撞之后,需要将我方坦克切换成爆炸造型。
这是检测我方坦克是否碰撞到敌方子弹的代码,声音现在不需要加。在制作作品的过程中,先将基础逻辑编写完,特效声音都在最后加。
2.添加敌方坦克代码
将我方坦克素材中的代码,复制到对应的敌方坦克素材中,注意坦克素材和移动的圆形素材要一一对应。调整一下敌方坦克的出现位置。那么如何将它们设置成随机移动?
这是敌方坦克随机移动的部分代码,其实就是随机一个值,判断这个值的范围,在什么范围内执行什么操作。注意这个值的范围要大一些,这样你可以调整它的行为,比如,让它多向下移动。
别忘了将敌方坦克碰撞的子弹,改成我方的子弹,否则敌方坦克就可以相互打架了,想想还挺有趣的。
3.添加我方子弹的代码
子弹素材移动的代码和坦克素材移动的代码一样,都是跟随着圆形素材。
这是我方子弹的初始代码,大小调整好,要将它隐藏,发射的时候在显示。
子弹的发射我是用克隆方式实现的,也就是发射出去的子弹是克隆出来的,而子弹本体还在随着圆形素材移动。建议:射击类游戏,子弹都采用克隆的方式,这样可以控制发射子弹的颗数,而且不影响本体。
这是当按下空格键,子弹发射出去的代码。这里说一下“好吧,无语是否可移动”这个变量,看到它的名字是不是觉得很奇怪,它有两个梗,它的作用和我踩的坑。
它的作用是控制子弹的颗数,想连续发射几颗,只需要将这个变量的初始值设置成几。
这是子弹克隆启动的代码,为什么一开始要移动18步?是为了让子弹看起来是从坦克前方打出,而不是坦克素材的正中心。
说一说这里的坑,“好吧,无语是否可移动”这个变量,一开始我是定义为只适用于当前角色,也就是局部变量,发现克隆里面虽然能使用它,但不能改变它的值。只适用于当前角色的变量,克隆里面是不能使用的。
新建变量的时候,为什么要分使用于所有角色和仅适用于当前角色?新建仅适用于当前角色的变量,使用起来,效率会更高,所以,能新建仅适用于当前角色的变量,绝不新建使用于所有角色的变量。
4.添加敌方子弹的代码
将我方子弹代码复制进去,只不过碰撞的物体要改一下。
5.老家和黄色砖块需要添加碰撞子弹的代码,草地和铁砖块不需要。
这是老家触碰到子弹的代码,变量“连续碰撞”是为了防止老家二次碰撞子弹,就是说,老家爆炸一次之后,就不会再爆炸第二次。很多时候都需要变量来控制作品的事件。
说说变量的类型,在scratch中,我们经常将变量当做数字使用,变量的常用类型有Int(整数型)、string(字符串型,一串字母或者汉字)、bool(两种结果,true和false)等。
以上是经典坦克大战制作过程,有任何技术问题,欢迎留言交流。
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com