原创作品,转载请标明:
碰撞检测是整个游戏的重头戏,没有它,子弹和敌机只能是路人。。。虽然很重要,但实现起来确是很简单。
每个从CCObject继承的类都包含了一个update函数,它是一个内联虚函数,执行频率为每帧调用一次。
那我们每帧内要做什么事呢?
我们先看一下游戏是什么?动画?其实不过是一张张快速变换的图片。比如我们设置60FPS,那么游戏就是一秒钟闪过60张图片,由于人眼的视觉残留效应导致看起来像是动画,因此游戏中的每一个动作我们可以认为是高速变化的静态的图片,而这个图片是以帧为单位。
所以我们可以在每一帧内进行碰撞检测。
主角飞机是一个精灵,也就是一张带alpha通道的PNG图,子弹也是,敌机同样也是,它们都是一块矩形区域,即便有的地方是透明的。所以碰撞检测就是在每一帧内判断多个不同类型矩形区域是否有相交,有即碰撞。
这里以生命值最大的Enemy3来做示例。而敌机和主角的碰撞是一样的道理。主角的爆炸效果也是采用帧动画,和敌机爆炸是一致的,但是要注意,主角飞机一旦爆炸,要记得StopShoot。
//此时处在敌机爆炸动画阶段,敌机未消失,子弹还有打到的机会,所以不进行检测不过要注意的是,实际游戏如果只是简单的检测矩形区域,那么可能会出现子弹从敌机身边掠过,而敌机却挂了的情况,这不科学啊!这是因为敌机两侧的透明区域过大了,碰撞检测的是整个PNG图的大小,不知道这个图上哪些点有代表着飞机。
所以要根据游戏的实际情况来调整精灵矩形区域的大小以达到较好的游戏体验。
版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/
4.随机出场一个飞行物,出场的概率不同
6.添加一个定时器和启动定时器的方法.每1/24秒一个动作
7.英雄飞机的生命周期
8.删除掉没有用的子弹和飞机
9.在world里面添加碰撞检测方法
10.检查每个子弹是否和飞行物碰撞
11.射击控制方法被定时器定时调用,控制英雄飞机射击子弹的速度
13.main()方法,设置窗口大小并显示
版权声明:本文为博主原创文章,未经博主允许不得转载。 /u/article/details/
截止,已经完成了飞机大战中的绝大部分操作。
以后三篇文章,就这三点进行项目的实施。
通过昨天的步骤,如无错误,就可以看到子弹在上升,敌机在斜飞,敌机在下落,但并没有发生子弹打中敌机,敌机消失;敌机碰到英雄机,英雄机减命,子弹击中蜜蜂,英雄机加命或双倍火力的现象。