小小菜之Cocos2d-x游戏开发旅程——项目实例:飞机大战(4)

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秒学院学习日志

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值