上一讲做了保卫萝卜的第一讲,主要介绍了如何生成地图以及如何做妖怪的轨迹,用的主要是自定义积木和克隆的技术!今天我们开始要放炮塔打妖怪了。先看一下演示视频。
看到没有,今天的程序要点有这几个:
1:炮塔部分,其中的关键点是炮塔的炮口能始终跟着第一个妖怪在变化。
2:子弹部分,子弹是有射程的,也就是妖怪进入到了射程范围,子弹才会发射。妖怪被杀光或者是离开射程范围子弹就会停止发射。
3:妖怪部分,妖怪被子弹打到会消失。
我们来看程序部分:
首先是地图发生了一些变化,CC哥把整个地图都填满了方块,一个是实心的,也就是通道,空心的位置可以放置炮塔,或是一些其他的物体。另外上次讲座里面方块不是正方形,是个长方形,编程的时候就会看着复杂一些,CC哥这次把它调整成正方形了,这样大家好看懂程序。
就是先用造型2画一遍,然后再用造型1画轨道。
这段代码不用讲了,很简单。
我们主要看炮塔的程序。
炮塔的程序主要有两个重要部分:
1:始终面向第一个妖怪。
2:在妖怪接近到一定距离开始发射子弹。
如何做到面向妖怪呢?这里面就有点难度了,因为我们不是面向妖怪这个角色,而是面向妖怪的克隆体,Scratch可没有这个命令,也就是没有办法直接面向克隆体,那怎么办呢?CC想了个办法,安排了个新的角色,ball,也就是小球,让这个角色始终跟着第一个克隆体,这样,炮塔只要面向这个ball的角色,那么不就始终面向妖怪的克隆体啦。
而射程这块相对简单,也就是用炮塔的x和y坐标,跟妖怪的x和y坐标进行计算。坐标这块基础课程已经有了。很简单,x的坐标差的平方加上y的坐标差的平方就等于两个点之间距离的平方。跟计算直角三角形一样。如果距离的平方小于30000,那么就在射程内了。就发射子弹。
这个隐藏的ball角色就是用来做炮塔的瞄准目标了,我们看看它的代码:
很简单,只要它始终移动到妖怪克隆体的坐标上就行了。看到没,这两个角色的关键点都是确认好妖怪x和妖怪y的数值,也就是第一个妖怪克隆体的动态坐标。这个我们一会集中讲。
先看看子弹的代码:
子弹的造型很酷吧,CC哥在网上下的,同时一点点把白色的背景擦掉的,还是花了点小功夫。
子弹的代码大家应该能看懂,如果跟着CC哥一直学,又平常自学的朋友,应该对子弹的做法不陌生了。CC哥做的复杂的原因是在细节的处理上。
比如:1、子弹碰到舞台边缘要消失。2、子弹碰到妖怪要等待一点点时间再消失,是因为妖怪检测到子弹的碰撞也要消失,所以留一点点时间差。3、克隆体先移动几步再显示是让子弹看起来都是从炮塔的炮口出来的,而不是从炮塔的中心点出来。
好了,其他的几个角色讲完之后,最关键的就是妖怪的角色的程序了,我们来看看跟上次的程序有什么不一样。
看,复杂了不少。怕大家看不清,我们一点一点来看。
这个妖怪的部分的程序跟上一讲的主要区别就是要确定妖怪克隆体的位置,也就是活着的第一个妖怪的坐标,记得,是活着的,死了的妖怪就不需要了。那么怎么实现呢?在这里CC哥引入了链表的概念,通过链表把每一个克隆变量的编号记录下来。而要攻击的目标妖怪始终是链表中的第一个妖怪。一旦这个目标妖怪被消灭掉,这个克隆体要消失,同时链表中对应的记录也要消失。然后目标始终是链表中第一项对应的克隆体。大家明白这个思路没有?没明白多看几遍,自己好好想想这里面的逻辑。
我们来一段一段看代码,首先是涉及克隆体链表的部分。我们为了区分每一个克隆体,在这里引入了私有变量‘妖怪编号’,对于这部分如果不清楚的可以查CC哥之前有专题将克隆体编号的帖子。通过妖怪编号,我们就可以区分开每一个克隆体。
同时创建一个妖怪队列的链表,把所有的妖怪编号存了进去,代表每一个妖怪克隆体。
其他的程序,上一讲都讲过了,不再重复,关键看克隆体的部分。
首先是碰到子弹的情况,碰到子弹要删除克隆体,那么在删除克隆体前,要做的事情是:1,把这个克隆体在妖怪队列里对应的那一项删掉。2,将目标妖怪设定为妖怪队列里面的第一个。3,如果这是最后一个妖怪,也就是妖怪队列里就剩一项了,那么把炮塔的方向设定到妖怪的起点。以准备消灭下一波妖怪。
如果没有碰到子弹,那简单了,就是先判断一下,你这个克隆体是不是目标妖怪,如果是,那么就把你的坐标给到妖怪x和妖怪y。确定目标妖怪的位置。
其他的小细节CC哥就不一一介绍啦,比如开场的倒计时画面,无非就是几个造型的变换。很简单。
好了,今天的课程就讲到这里,下次CC哥会进一步跟大家一起设计多个炮塔的情况,大家可以先自己考虑一下,如果出现多个炮塔,那么这个程序的逻辑又会发生什么变换呢?
如果觉得CC哥做的不错,请点击右下角的"好看",给CC哥一个鼓励!
超乎想象的使用体验
历史课程: