cocos2d-x学习之物体接触检测

游戏中经常会用到这样的检测技术。例如,飞行游戏中飞机发射的子弹是否击中敌人;打斗类游戏中英雄的武器是否打中敌人;

所以,我觉得很有必要总结一下


首先,我们要定义几个CCArray类型的数组,用于保存要检测是否相互接触的物体(一般来说是精灵)
我们就以子弹和敌机的例子来描述一下


在h文件上添加:

  CCArray *array_bullet;             //存储子弹
  CCArray *array_enemyPlane;   //存储敌机
  
  faction(float delta);                      //检测接触的函数



在cpp文件上:
在创建精灵的函数中加入:



  array_bullet = CCArray::create();                      //创建初始化CCArray
  array_enemyPlane = CCArray::create(); 

  array_player->retain();                                           //引用数加一,这样在其它的函数中也可以用到
  array_player->retain();
  
  array_player->addChild(spriteBulletObj);               //添加子弹精灵进数组
  array_enemyPlane->addChild(spritePlaneObj);   //添加子弹精灵进数组

  schedule(schedule_selector(faction()));       //用定时器不断检测是否有物体接触


在faction()函数中:


faction(float delta)
{
   CCSprite *bullet = NULL;
   CCObject *pObj = NULL;
   CCARRAY_FOREACH(array_bullet,pObj)   //轮询子弹数组中的每一个成员
    {
         bullet = (CCSprite*)(pObj);

         if(!bullet)
         break;


         CCSprite *enemyPlan = NULL;
         CCObject *pObj = NULL;
         CCARRAY_FOREACH(array_enemyPlane,pObj) //轮询敌机数组中的每一个成员
         {
              enemyPlane = (CCSprite*)(pObj);


             if(!enemyPlan)
             break;

             if(bullet>boundingBox().intersectsRect(enemyPlan>boundingBox())) //这里是判断两个精灵的边界框是否有重复的部分,读者也可以用其他的方法来判断
                 {     
                      //*****这里就可以写怎样处理接触事件******//
               }
       }
    }
 }




 最后记得要release掉两个CCArray数组。
 好了,这样一个简单的检测物体是否接触的功能就完成了。

你可能感兴趣的:(cocos2d-x学习)