2011-07-05 5 views
0

質量中心を槍のような物体に設定しようとしています。ここでは、関連するコードは次のとおりです。Box2D質量中心

// Create spear body and shape 
    b2BodyDef spearBodyDef; 
    spearBodyDef.type = b2_dynamicBody; 
    spearBodyDef.position.Set(100.0/PTM_RATIO, 100.0/PTM_RATIO); 
    //spearBodyDef.angle = 45.0 * (180.0f/b2_pi); 
    spearBodyDef.userData = _spear; 
    _spearBody = _world->CreateBody(&spearBodyDef); 


    b2PolygonShape spearShape; 
    spearShape.Set(verts, num); 

    b2FixtureDef spearShapeDef; 
    spearShapeDef.shape = &spearShape; 
    spearShapeDef.density = 100.0f; 
    spearShapeDef.friction = 0.9f; 
    spearShapeDef.restitution = 0.1f; 
    _spearBody->CreateFixture(&spearShapeDef); 

    b2MassData massD; 
    _spearBody->GetMassData(&massD); 
    b2Vec2 centerV; 
    centerV.x = 25.0; 
    centerV.y = -1.0f; 
    massD.center = centerV; 
    _spearBody->SetMassData(&massD); 

これは、アサーションの失敗のアプリをクラッシュ:

Jul 5 02:52:23 unknown UIKitApplication:com.youcompany.box[0xb15c][10311] <Notice>: Assertion failed: (m_I > 0.0f), 
Jul 5 02:52:23 unknown UIKitApplication:com.youcompany.box[0xb15c][10311] <Notice>: function SetMassData, file /User 
Jul 5 02:52:23 unknown UIKitApplication:com.youcompany.box[0xb15c][10311] <Notice>: s/~/Desktop/box/box/libs/Box 
Jul 5 02:52:23 unknown UIKitApplication:com.youcompany.box[0xb15c][10311] <Notice>: 2D/Dynamics/b2Body.cpp, line 357 
Jul 5 02:52:23 unknown UIKitApplication:com.youcompany.box[0xb15c][10311] <Notice>: . 

私が間違って何をしているのですか?ありがとう

+0

何らかの理由により、慣性モーメントはゼロより小さくなります – Andrew

答えて

0

これは手間のかかるものです... CoMの場所の変更に伴って大量データのm_Iを変更することはできますが、それはおそらく非常に難しく、取得する前にさらに多くのクラッシュが発生します幸運な。そのような質量を変更するのではなく、槍の前にもう一つのフィクスチャを追加して重力を取り除くことができます。これは調整するほうがはるかに簡単です。この2番目のフィクスチャは、何かに衝突させたくない場合はセンサーとなります。