画自己的飞机并让随着手指而移动
在上一集中,已经可以让敌机定时刷新并且可以飞起来了,接下来就是添加自己的飞机了,直接在代码里面定义一个Image组件上去,先瞅一眼自己的飞机长啥样儿
接下来就是得让自己的飞机随着手指的拖动而动起来了,思路很简单,给自己的飞机添加一个onTouch事件,当手指拖动时,就改变自己飞机的坐标值
简单起见,这里默认手指点的时候,默认拖动的是自己飞机的中心点,效果如下
自己的飞机大体已经完成,接下来就是画子弹了,子弹的原理跟敌机很类似,定时刷新子弹,定时更新每个子弹的y坐标,唯一不同的是,敌机的起始坐标的y轴只固定的,而子弹的起始坐标应该根据当前自己飞机的位置而设置,代码如下
这里要注意的是子弹的起始位置,y坐标的位置保持跟自己飞机的y坐标一致即可,而x坐标的位置应该是 飞机的x + 子弹宽度的一半 - 飞机宽度的一半,其他的就跟敌机的逻辑死一样的的,定时添加,定时更新y轴坐标位置,效果如下
判断敌机是否被击落
敌机已经出现,自己的飞机也能够打出子弹了,那么接下来就是将敌机击落了,思路也很简单,如果某一个子弹的坐标进入了其中一架敌机的坐标范围内,那么就代表着该敌机已经被击中了,被击中后,移除该子弹和敌机,即可
这里需要说明一下,子弹的素材是一个正方形,而真正的子弹可以想象成一个锥形体,它的头是尖的,只要子弹的尖碰到敌机,则认为敌机被击中,所以这里子弹的x坐标取了图片的中心点的位置。当子弹与敌机发生碰撞时,则移除该位置的子弹和敌机,效果如下
敌机已经可以被击落了,然后我们在添加一个分数统计,统计一下击落的敌机的数量,思路是,当敌机发生碰撞时,变量score增加一次
效果如下:
判断自己是否死亡
现在敌机已经可以狗带了,接下来就是自己狗带了,原理也很简单,跟敌机死亡类似,如果自己飞机的坐标与某一架敌机的坐标发生重合,则认为自己已经狗带,,相关代码如下:
本来是想着用四个坐标点的位置来判断是否发生碰撞的,后来发现,这种做法是在是太麻烦,后来采用另外一种办法,图片本来是正方形的,这里我们想象它是一个圆形的图片,然后采用一个简单的数学公式 来计算出圆心距,如果圆心距的长度小于敌机圆的半径+自己飞机原的半径,则认为发生了碰撞,效果如下
呃,gameover之后,只显示一个gameover太单调了,那就加个重新开始按钮上去吧
效果如下:
重新开始的业务逻辑就很简单了,更改游戏状态,敌机数组子弹数组全都清空,分数归零等就可以,相关代码如下
效果如下:
这集先到这里,下一集继续优化吧