4.子弹与敌机的碰撞检测
碰撞检测,这里就开始要实现子弹打飞机的过程了。。嘿嘿
那么问题来了!
碰撞检测的原理是神马呢?
其实非常的简单!
我们在创建敌机和子弹的时候不是都给添加到了两个集合中吗?
那么,我们遍历这两个集合就ok了,遍历每颗子弹,每个敌机。让某颗子弹与某个敌机做矩形碰撞
也就是说,当这两个矩形相交的时候,将敌机和子弹都移除就搞定了
好了,废话不多说了,直接上代码
在GameScene中定义一个定时器update,用来不停检测是否碰撞
void Game::update(float t)
{
//碰撞检测
for (int i = 0 ; i < allbullet.size(); i++) {
Bullet * nowbullet = allbullet.at(i);
Rect br(nowbullet->getPositionX() , nowbullet->getPositionY() , 12 , 12);
for (int j = 0; j < allenemy.size(); j++) {
Enemy * nowenemy = allenemy.at(j);
Rect er(nowenemy->getPositionX() , nowenemy->getPositionY() ,40 , 50);
if (er.intersectsRect(br)) {
//移除敌机
nowenemy->removeFromParent();
allenemy.eraseObject(nowenemy);
//移除子弹
nowbullet->removeFromParent();
allbullet.eraseObject(nowbullet);
i--;
break;
}
}
}
}
当然,这样看着有点单调,大家可以尝试在他们碰撞的位置加一个爆炸动画,这样看着效果就很好了。
是不是觉得小时候玩的游戏跟想象中的不一样呢,哈哈!
Ps:最近比较忙,没来得及更新,各位看官见谅哦,后面会慢慢补上的^_^
未完待续。。。。
———9秒学院学习日志