塔防游戏 第九/十集
这两集我们完成了一个新炮台——激光炮台,以及敌人碰到地图边缘扣除生命值导致游戏结束的功能。
绘制炮台
在炮台角色中绘制炮台的图片并复制到图标一份,绘制炮台不可选中的图标和炮台的开火动画。我们设计激光炮台的开火前有短时间的蓄力过程,我们需要两张蓄力的外观。
在对应的描述界面也加上激光炮台的描述。
炮台购买和描述
接下来在商店中显示和购买激光炮台。在炮台图标的克隆中新增激光炮台,移动到指定的位置。
炮台射击
接下来编写激光炮台的射击流程。因为激光炮是蓄力伤害,我们需要另一个角色扮演炮台打出去的激光与敌人检测碰撞。因此我们首先要知道炮台开火时的位置和方向。新建三个列表激光X坐标,激光Y坐标和激光方向来存放激光起始的位置。
一次射击流程中,首先是蓄力动画,然后我们将激光发射的坐标加入队列,交给我们之后创建的激光角色作处理。
之后是对炮台瞄准受到装填时间影响没有平滑瞄准,这个我们在制作炮塔的时候就解决这个功能了。
激光的处理与敌人杀伤
接下来我们处理激光。由于可能有多个激光炮塔,所以我们用克隆体移动到激光发射位置实现激光发射。我们新建一个私有变量激光编号用来迭代生成激光,程序开始时设置成0,每次生成时+1。
克隆激光的操作我们用一个自建积木实现,重复执行直到激光编号和三个列表中项目数相等,每次克隆前先移动到相应的位置和方向,再克隆自己。
生成激光后,我们广播一次激光发射,让敌人收到激光发射的消息。然后给激光一个逐渐消除的动画,最后发射完成删除激光克隆体。后移操作是为了让激光不至于遮挡炮塔或者敌人之类的其他角色。
每次新关卡开始时,三个列表,激光编号都要初始化。
接下来当激光发射的时候,我们需要通知敌人。如果敌人没要逃跑并且碰到了激光,那么它们需要降低血量。
游戏结束功能
我们设置一个全局变量生命,存放我们一共能放过几个敌人到地图边界逃跑。这个变量在游戏开始时初始化为需要的值,在敌人碰到地图边缘后减少。
当生命值归零的时候,游戏就应该结束了。老师这里用了两个造型实现结束动画,偷懒做了个一个造型的简单的,但总体上思路都一样。
这里的等待时间是为了放置游戏开始时生命还没有初始化的时候被判断为游戏结束,所以稍等待一秒再开始监控生命值状态。
总结
第九集我们完成了新炮台激光炮台的实现,完成了范围打击敌人的效果。这次也用到了不同角色之间的联动,比如炮台开火生成激光角色,激光角色广播使敌人受到伤害。这次新增炮台轻松了很多,在我们之前实现双管炮台时留下的很多规则比如炮台瞄准都可以直接使用,更体现了编程前规划内容的重要性。
第十集我们完成了最后的功能生命值系统,给游戏增加了游戏结束的功能,至此塔防游戏也顺利结束了。在编写过程中学到了很多有用的新技巧,比如让敌人自动寻路,炮台的锁定和平滑跟踪,方向角和位置的计算,多个角色通过变量和广播进行联动操作等等。在之后编写射击,移动等逻辑时都可以套用塔防游戏中使用的方法。