2014-02-06 59 views
0

在Box2D中,我可以在靜態盒子和動態鏈條形狀之間製作一個旋轉接頭,如下圖所示?我希望能夠使用帶電機的旋轉接頭旋轉鏈條形狀。 這也關係到身體的關節在哪裏嗎?它可能是而不是在實際的形狀,但它外面的某個地方?Box2d。我可以在靜態箱體和動態鏈條形狀之間進行旋轉連接嗎?

enter image description here

下面的代碼生成兩個夾具但他們

b2BodyDef bd2; 
    b2Body* ground = world->CreateBody(&bd2); 

    b2PolygonShape shape; 
    const b2Vec2 vertices[4] = { 
     b2Vec2(-40, -30), 
     b2Vec2(40, -30), 
     b2Vec2(40, 30), 
     b2Vec2(-40, 30) }; 
    shape.Set(vertices, 4); 
    ground->CreateFixture(&shape, 0.0f); 


b2BodyDef bd; 
bd.type = b2_dynamicBody; 
b2Body* container = world->CreateBody(&bd); 


b2Vec2 vs[4]; 
vs[0].Set(-11.583f, 20.806f); 
vs[4].Set(-9.164f, -19.383f); 
vs[6].Set(9.164f, -19.383f); 
vs[8].Set(11.342f, 0.0f); 

vs[4].Set(11.583f, 20.806f); 

b2ChainShape chain; 
chain.CreateChain(vs, 4); 
container->CreateFixture(&chain, 0.0f); 

b2RevoluteJointDef revoluteJointDef; 
revoluteJointDef.bodyA = ground; 
revoluteJointDef.bodyB = container; 
revoluteJointDef.collideConnected = false; 
revoluteJointDef.localAnchorA.Set(0, 0); 
revoluteJointDef.localAnchorB.Set(0, 0); 
b2RevoluteJoint* m_joint = (b2RevoluteJoint*)world->CreateJoint(&revoluteJointDef); 

回答

1

的連接錨件可以在任何地方,它不涉及以任何方式固定形狀之間沒有旋轉關節。你甚至可以有兩個沒有固定裝置的物體,並在它們之間建立一個連接。

所以是的,你可以在靜態盒子和動態鏈條形狀之間進行旋轉連接。你會遇到的問題是,當一個物體只有一個鏈狀,它沒有質量,因爲形狀沒有音量。當它沒有質量時,Box2D認爲它具有無限的旋轉慣性,並且不會旋轉。

您可以通過添加一個具有體積的虛擬夾具(例如多邊形或圓形)來解決此問題。您可以將燈具設置爲傳感器,因此不會導致碰撞響應(或將衝突濾波器標誌位全部設置爲零)。

如果你真的不想在身體上有任何其他夾具,你也可以用b2Body :: SetMassData手動設置身體的「大量數據」的值,但是你需要知道什麼值來設置。找到這些值的最簡單方法是首先創建dummy fixture,使用GetMassData獲取值,銷燬fixture,然後SetMassData將值返回。