2013-07-30 50 views
1

我正在通過使用鏈狀來面對新問題。兩個鏈狀體之間的碰撞不像正常人那樣發生。所以這是正常行爲,還是我爲此做了任何錯誤?鏈狀碰撞

以下是用於此目的的代碼。

 ChainShape mChainShape = new ChainShape(); 
     Vector2[] mVector2 = new Vector2[lineList.size()]; 

     for (int i = 0; i < lineList.size(); i++) { 
       mVector2[i] = new Vector2(lineList.get(i).getX1() 
           /PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT, 
           lineList.get(i).getY1() 
           /PhysicsConstants.PIXEL_TO_METER_RATIO_DEFAULT); 
     } 

     mChainShape.createChain(mVector2); 
     FixtureDef mFixtureDef = new FixtureDef(); 
     Body mChainBody; 
     BodyDef mBodyDef = new BodyDef(); 
     mBodyDef.type = BodyType.DynamicBody; 
     mChainBody = mPhysicsWorld.createBody(mBodyDef); 
     mFixtureDef.shape = mChainShape; 
     mFixtureDef.density = 1f; 
     mFixtureDef.friction = 0.5f; 
     mFixtureDef.restitution = 0.5f; 
     mChainBody.createFixture(mFixtureDef); 
     mChainShape.dispose(); 

如果我想創建基於觸摸座標的身體,那麼這件事可能與否?

請給出任何指導。

+0

鏈/線幾何不能與鏈/線幾何相碰撞。它不受支持。試着看看你是否可以在動物體上使用細長的矩形。 –

+0

如果我決定創建基於觸摸的多邊形形狀,那麼如何創建它? – Siddharth

+0

這不容易回答。但是如果你有動態鍊形狀,那麼你需要有堅實的形狀以便與它們相撞。例如對於很多情況你需要一個凸分解。 –

回答

0

BOX 2D不支持鍊形狀碰撞。

但是,如果您的身體是多邊形,您可以爲此創建一個三角近似值,並從b2PolygonShape組成您的身體。

b2Vec2 triVerts[3]; 
// for this example polygon should have "center" point, from that it can be observed around. 
triVerts[0] = b2Vec2(0,0); // center 
for(int idx = 1; idx < lineList.size(); idx++) 
{ 
    b2PolygonShape triangle; 
    fixtureDef.shape = &triangle; 
    // Assumes the vertices are going around 
    triVerts[1] = mVector2[idx-1]; 
    triVerts[2] = mVector2[idx]; 
    triangle.Set(triVerts,3); 
    mChainBody.CreateFixture(&fixtureDef); 
} 

for b2PolygonShape collision will be fine fine。

+0

如果有人感興趣......我已經在[我的開發分支fork2D]中添加了對連鎖形狀碰撞的支持(https://github.com/louis-langholtz/Box2D)。 –