scratch制作经典坦克⼤战流程(分享⼀些⼩技巧和踩过的坑)
⽤scratch制作⼩游戏的时候,我没有写游戏需求,也没有画流程图。每次有想法,就直接上⼿做了,遇到问题,兵来将挡,⽔来⼟掩。
其实应该画交互流程图,尤其内容⽐较多的时候。在制作欢乐⽃地主的时候,因为交互很多,所以到后期感觉很乱,⽽且出现了许多bug。
这期讲的不是欢乐⽃地主,⽽且经典坦克⼤战的流程,制作过程中遇到的问题,以及⼀些⼩技巧。
先上⼀张图,因为时间问题,就制作了⼀个关卡,如果⼩伙伴们想完善,只需要在链表中添加砖块的坐标。
如果想现在体验⼀把,这是作品的链接,可以查看源码,下载素材。
好玩别忘了点个赞!赞!赞!
有⼀天,突然想⽤scratch制作⼩时候玩过的坦克⼤战,打开scratch就搞起来。
添加场景
需要添加的场景,是图⽚中的黄⾊砖块、⽩⾊砖块、草丛、⽼家、坦克(玩家坦克,敌⽅坦克,在没有写逻辑时,它们是⼀样的),还有看不见的⼦弹。
在⽹上素材,PS。
1.添加⽼家
怎么制作游戏将舞台场景分成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.添加敌⽅⼦弹的代码
4.添加敌⽅⼦弹的代码
将我⽅⼦弹代码复制进去,只不过碰撞的物体要改⼀下。
5.⽼家和黄⾊砖块需要添加碰撞⼦弹的代码,草地和铁砖块不需要。
这是⽼家触碰到⼦弹的代码,变量“连续碰撞”是为了防⽌⽼家⼆次碰撞⼦弹,就是说,⽼家爆炸⼀次之后,就不会再爆炸第⼆次。很多时候都需要变量来控制作品的事件。
说说变量的类型,在scratch中,我们经常将变量当做数字使⽤,变量的常⽤类型有Int(整数型)、string(字符串型,⼀串字母或者汉字)、bool(两种结果,true和false)等。
以上是经典坦克⼤战制作过程,有任何技术问题,欢迎关注与我们讨论。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论