飞机大战游戏单机边界碰撞检测代码+详细解说

原创作品,转载请标明

碰撞检测是整个游戏的重头戏,没有它,子弹和敌机只能是路人。。。虽然很重要,但实现起来确是很简单。

每个从CCObject继承的类都包含了一个update函数,它是一个内联虚函数,执行频率为每帧调用一次。

那我们每帧内要做什么事呢?

我们先看一下游戏是什么?动画?其实不过是一张张快速变换的图片。比如我们设置60FPS,那么游戏就是一秒钟闪过60张图片,由于人眼的视觉残留效应导致看起来像是动画,因此游戏中的每一个动作我们可以认为是高速变化的静态的图片,而这个图片是以帧为单位。

所以我们可以在每一帧内进行碰撞检测。

主角飞机是一个精灵,也就是一张带alpha通道的PNG图,子弹也是,敌机同样也是,它们都是一块矩形区域,即便有的地方是透明的。所以碰撞检测就是在每一帧内判断多个不同类型矩形区域是否有相交,有即碰撞。

这里以生命值最大的Enemy3来做示例。而敌机和主角的碰撞是一样的道理。主角的爆炸效果也是采用帧动画,和敌机爆炸是一致的,但是要注意,主角飞机一旦爆炸,要记得StopShoot。

//此时处在敌机爆炸动画阶段,敌机未消失,子弹还有打到的机会,所以不进行检测

不过要注意的是,实际游戏如果只是简单的检测矩形区域,那么可能会出现子弹从敌机身边掠过,而敌机却挂了的情况,这不科学啊!这是因为敌机两侧的透明区域过大了,碰撞检测的是整个PNG图的大小,不知道这个图上哪些点有代表着飞机。

所以要根据游戏的实际情况来调整精灵矩形区域的大小以达到较好的游戏体验。

版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/


根据逻辑分析把大飞机,小飞机,蜜蜂,子弹,英雄机的公共属性和方法泛化到父类(FlyingObject)中去.

1.默认构造器,用于初始化

5.父类中重构了move方法,实现了各种飞行物的移动和播放销毁动画功能

6.子类中必须有的方法,返回下一个要播放的照片引用,如果返回null表示没有可播放的照片了.(虽然只有一句,但是非常重要)

7.飞行物被打了一下,生命-1,当生命等于0的时候为死亡状态

8.经典算法:碰撞检测的方法,用于检测物体的位置是否在碰撞的范围内

9.状态检查方法,用于返回状态

/** 检查飞行物是否活动的 */ /** 检查飞行是否可以被删除*/ /** 飞行物添加"去死"方法*/

1.获取的小飞机的资源

2.初始化小飞机,同时初始化照片

3.继承父类的抽象方法,播放下一张图片,用于销毁

1.初始化大飞机,让生命等于3(即子弹打三下才打死)

1.继承了大飞机,重写了paint方法,在飞机外面加上一个框框

2.固定奖励,打掉返回双倍奖励

1.初始化英雄飞机,让其在地图的下方出现

2.重写了move()的无参方法,用于显示动态效果和英雄飞机的销毁效果

3.再次重写了move()有参方法,用于英雄飞机随着鼠标移动

4.射击方法,实现是单枪射击还是双枪射击

1.初始化子弹,因为子弹跟着英雄飞机一起走,所以需要传入两个参数.

2.重写子弹move方法,子弹是从下往上移动

1.初始化蜜蜂,蜜蜂的出场方向是随机的

2.重写了move()方法,蜜蜂的移动方向实现斜着的

1.初始化天空,改变了天空的移动速度,和第二种图片的高度

2.重写了move()方法,两张图片同时移动,一张图片移除下边界就重新定义高度再移动.

3.重写了paint,用于绘制两张背景图片的位置.

4.天空没有销毁图片,所以返回null

1.奖励接口,用于获取奖励

1.敌人接口,用于获取得分

1.初始化三张开始,暂停,结束照片

2.初始化世界中的物体

3.做每隔一秒出场一个飞行物

 
 
 

4.随机出场一个飞行物,出场的概率不同

 
 
 

 

6.添加一个定时器和启动定时器的方法.每1/24秒一个动作

 
 

7.英雄飞机的生命周期

 
 
 
 
 

8.删除掉没有用的子弹和飞机

 
 

9.在world里面添加碰撞检测方法

 
 

10.检查每个子弹是否和飞行物碰撞

 
 

11.射击控制方法被定时器定时调用,控制英雄飞机射击子弹的速度

 
 
 

 
 
 

13.main()方法,设置窗口大小并显示

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/

截止,已经完成了飞机大战中的绝大部分操作。

以后三篇文章,就这三点进行项目的实施。

       通过昨天的步骤,如无错误,就可以看到子弹在上升,敌机在斜飞,敌机在下落,但并没有发生子弹打中敌机,敌机消失;敌机碰到英雄机,英雄机减命,子弹击中蜜蜂,英雄机加命或双倍火力的现象。

我要回帖

更多关于 飞机大战游戏单机 的文章

 

随机推荐