cocos2d-x學習之物體接觸檢測
阿新 • • 發佈:2019-01-08
遊戲中經常會用到這樣的檢測技術。例如,飛行遊戲中飛機發射的子彈是否擊中敵人;打鬥類遊戲中英雄的武器是否打中敵人;
所以,我覺得很有必要總結一下
首先,我們要定義幾個CCArray型別的陣列,用於儲存要檢測是否相互接觸的物體(一般來說是精靈)
我們就以子彈和敵機的例子來描述一下
在h檔案上新增:
在cpp檔案上:
在建立精靈的函式中加入:
最後記得要release掉兩個CCArray陣列。
好了,這樣一個簡單的檢測物體是否接觸的功能就完成了。
所以,我覺得很有必要總結一下
首先,我們要定義幾個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陣列。
好了,這樣一個簡單的檢測物體是否接觸的功能就完成了。