首页  >  Scratch编程猫  >  文章正文

scratch制作经典坦克大战流程

Scratch编程猫 2019-06-12 qhdsteam.com

  用scratch制作小游戏的时候,我没有写游戏需求,也没有画流程图。每次有想法,就直接上手做了,遇到问题,兵来将挡,水来土掩。

  其实应该画交互流程图,尤其内容比较多的时候。在制作欢乐斗地主的时候,因为交互很多,所以到后期感觉很乱,而且出现了许多bug。

  这期讲的不是欢乐斗地主,而且经典坦克大战的流程,制作过程中遇到的问题,以及一些小技巧。

  先上一张图,因为时间问题,就制作了一个关卡,如果小伙伴们想完善,只需要在链表中添加砖块的坐标。

  如果想现在体验一把,这是作品的链接,可以查看源码,下载素材。

  好玩别忘了点个赞!赞!赞!

  http://kada.study.163.com/project/109083-100517.htm

  有一天,突然想用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.添加敌方子弹的代码

  将我方子弹代码复制进去,只不过碰撞的物体要改一下。

  5.老家和黄色砖块需要添加碰撞子弹的代码,草地和铁砖块不需要。

很多时候都需要变量来控制作品的事件

这是老家触碰到子弹的代码,变量“连续碰撞”是为了防止老家二次碰撞子弹,就是说,老家爆炸一次之后,就不会再爆炸第二次。。

  说说变量的类型,在scratch中,我们经常将变量当做数字使用,变量的常用类型有Int(整数型)、string(字符串型,一串字母或者汉字)、bool(两种结果,true和false)等。


标签:

发表评论

秦皇岛少儿编程 Copyright @ 2019-2020 All Rights Reserved. 版权所有 备案号:冀ICP备19006486号   涉未成年人专用举报邮箱:7002903@qq.com