2012-06-29 23 views
2

我是box2d的新手。我在box2d開始了一個新遊戲,並在世界上創建了5個動態身體。最初我需要防止它們之間的碰撞。所以我設置了所有機構的組索引。碰到身體後,我想讓這個身體碰撞。如何重置組索引。請幫助..如何在box2d中動態改變人體的組索引

回答

2

聽起來你正在尋找的東西像

b2Body *body = world->GetBodyList(); 
b2Filter filter = body->GetFilterData(); 
filter.maskBits = filter.maskBits | THE_RELEVANT_CATEGORY_BITS; 
body->SetFilterData(&filter); 

這裏的想法是,你可以得到碰撞過濾數據的任何對象,使用一些布爾邏輯來分配碰撞數據給maskBits字段,然後使用SetFilterData將新的碰撞數據應用於正文。 THE_RELEVANT_CATEGORY_BITS應該是枚舉類型的元素,其中每個碰撞過濾類別都由唯一的二進制整數表示。

退房的Box2D的教程更多關於這個http://www.iforce2d.net/b2dtut/collision-filtering

1

,如果你有一個機構超過1個燈具,那麼你可以使用此代碼塊

for (b2Fixture* fix = body->GetFixtureList(); fix; fix = fix->GetNext()) 
{ 
    b2Filter filter= fix->GetFilterData(); 

    filter.groupIndex = 0; 
    filter.categoryBits = 0x0004; 
    filter.maskBits = 0x0002; 
    fix->SetFilterData(filter); 
}