cocos2d之Box2D詳解 刪除物理世界物件

2021-06-21 23:31:13 字數 1238 閱讀 4071

cocos2d之box2d詳解 刪除物理世界物件

dionysoslai 2014-5-8

物理世界物件,有創造,就有銷毀。

通常,我們在更新函式中會這樣寫到:

void helloworld::update(float dt)  

}}

在這裡,我們做幾件事,一是:遍歷物理世界中的物件;將物理世界物件資料,轉換成我們的資料物件,然後更新物件的位置和旋轉度。

如果我們要銷毀其中的某個物理世界物件。通常我們會賦予我們的物件乙個屬性,然後根據這個屬性來判斷是否要銷毀該物件。

如下面**所示:

m_world->step(delta, 10, 10);

/// 使我們的精靈匹配物理**。

for (b2body *b = m_world->getbodylist(); b; ->getnext())

else

}}

ps:balldata->getdead(),這裡的getdead函式,就是我們對物件賦予的乙個屬性,來說判斷我們是否要銷毀物件。

這段**有個很嚴重的問題,就是當我們銷毀物件時,這個物件的所有資訊都將被消除,那麼我們將會去不到去下乙個節點資訊,正確的做法就是要提前獲取下乙個節點,同時b->getuserdata() == null 情況下,我們也要獲取下乙個節點,修改**如下:

m_world->step(delta, 10, 10);

/// 使我們的精靈匹配物理**。

for (b2body *b = m_world->getbodylist(); b; )

else

}else

}

當然這是乙個方法,如果不考慮效率的話,我們通過不修正我們物件的位置資訊,我們也可以看起來,就像是將物件銷毀掉,即在刪除這段**即可:

balldata->setposition(ccp(b2node->getposition().x*ptm_ratio,b2node->getposition().y*ptm_ratio));

balldata->setrotation(-1*cc_radians_to_degrees(b2node->getangle()));

這是刪除物件乙個方法,還有乙個方法就是,我們可以將要刪除物件儲存在乙個臨時容器中,等物體鍊錶遍歷完成之後,就可以刪除臨時容器中的物體了。

(譯)使用cocos2d和box2d製作滾動背景

前言 這次我要翻譯的兩篇教程,其實和大家比較關心的 超級瑪利 有關,就是如何使用cocos2d和box2d製作乙個帶有滾動背景的platform遊戲。但是,這兩篇教程並沒有教大家如何製作超級瑪利。但是,一些關鍵技術點還是有涉及到。相信看完這兩篇文章,應該能對大家有所啟發。如果哪位朋友有空,能利用本教...

cocos2d實現語音 Cocos2d 聲音API

param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...

box2d 碰撞過濾

原帖 碰撞篩選就是乙個防止某些形狀發生碰撞的系統。按照具體需求設定哪些物體跟那些物體發生碰撞,跟哪些物體不發生碰撞。box2d通過種群跟組索引支援碰撞篩選。組索引比較簡單,設定其shapedef的groupindex值即可,例如boxdef.filter.groupindex 1。通過groupin...