OpenHarmony自制飞机大战(2)

画自己的飞机并让随着手指而移动

在上一集中,已经可以让敌机定时刷新并且可以飞起来了,接下来就是添加自己的飞机了,直接在代码里面定义一个Image组件上去,先瞅一眼自己的飞机长啥样儿

接下来就是得让自己的飞机随着手指的拖动而动起来了,思路很简单,给自己的飞机添加一个onTouch事件,当手指拖动时,就改变自己飞机的坐标值

简单起见,这里默认手指点的时候,默认拖动的是自己飞机的中心点,效果如下

自己的飞机大体已经完成,接下来就是画子弹了,子弹的原理跟敌机很类似,定时刷新子弹,定时更新每个子弹的y坐标,唯一不同的是,敌机的起始坐标的y轴只固定的,而子弹的起始坐标应该根据当前自己飞机的位置而设置,代码如下

这里要注意的是子弹的起始位置,y坐标的位置保持跟自己飞机的y坐标一致即可,而x坐标的位置应该是 飞机的x + 子弹宽度的一半 - 飞机宽度的一半,其他的就跟敌机的逻辑死一样的的,定时添加,定时更新y轴坐标位置,效果如下

判断敌机是否被击落

敌机已经出现,自己的飞机也能够打出子弹了,那么接下来就是将敌机击落了,思路也很简单,如果某一个子弹的坐标进入了其中一架敌机的坐标范围内,那么就代表着该敌机已经被击中了,被击中后,移除该子弹和敌机,即可

这里需要说明一下,子弹的素材是一个正方形,而真正的子弹可以想象成一个锥形体,它的头是尖的,只要子弹的尖碰到敌机,则认为敌机被击中,所以这里子弹的x坐标取了图片的中心点的位置。当子弹与敌机发生碰撞时,则移除该位置的子弹和敌机,效果如下

敌机已经可以被击落了,然后我们在添加一个分数统计,统计一下击落的敌机的数量,思路是,当敌机发生碰撞时,变量score增加一次

效果如下:

判断自己是否死亡

现在敌机已经可以狗带了,接下来就是自己狗带了,原理也很简单,跟敌机死亡类似,如果自己飞机的坐标与某一架敌机的坐标发生重合,则认为自己已经狗带,,相关代码如下:

本来是想着用四个坐标点的位置来判断是否发生碰撞的,后来发现,这种做法是在是太麻烦,后来采用另外一种办法,图片本来是正方形的,这里我们想象它是一个圆形的图片,然后采用一个简单的数学公式 \sqrt{(a1+a2)^2+ (b1+b2)^2} 来计算出圆心距,如果圆心距的长度小于敌机圆的半径+自己飞机原的半径,则认为发生了碰撞,效果如下

呃,gameover之后,只显示一个gameover太单调了,那就加个重新开始按钮上去吧

效果如下:

重新开始的业务逻辑就很简单了,更改游戏状态,敌机数组子弹数组全都清空,分数归零等就可以,相关代码如下

效果如下:

这集先到这里,下一集继续优化吧

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容