1. 程式人生 > >cocos2d-x學習之物體接觸檢測

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陣列。
 好了,這樣一個簡單的檢測物體是否接觸的功能就完成了。