2016-05-25 7 views
3

Box2Dを使用しているプログラムを実行すると、私のプロジェクトに関連していないファイル(ビルドされていないフォルダがプロジェクトにリンクされていない)にあるため、この予期しないエラーが発生します。私はVS12ためBox2Dのためのコピーを入手し、ここでのチュートリアル以下の私のプロジェクトとセットアップ-EDのプロジェクトのためにそれを建て:https://www.youtube.com/watch?v=kEClRFKyGkw&list=PLSPw4ASQYyymu3PfG9gxywSPghnSMiOAW&index=53アサーション失敗:area> 1.19209

ここに私のコードです:

私は init()呼ばれてきた
void Box::init(b2World* world, const glm::vec2& position, const glm::vec2& dimensions) 
{ 
    m_dimensions = dimensions; 
    b2BodyDef boxDef; 
    boxDef.type = b2_dynamicBody; 
    boxDef.position.Set(position.x, position.y); 
    m_body = world->CreateBody(&boxDef); 
    b2PolygonShape boxShape; 
    boxShape.SetAsBox(position.x/2.0f, position.y/2.0f); 

    b2FixtureDef fixtureDef; 
    fixtureDef.shape = &boxShape; 
    fixtureDef.density = 1.0f; 
    fixtureDef.friction = 0.3f; 

    m_fixture = m_body->CreateFixture(&fixtureDef); 
} 

Debug Error

:このよう
b2Vec2 gravity(0.0f, -9.8f); 
    m_world = std::make_unique<b2World>(gravity); 
    b2BodyDef groundBodyDef; 
    groundBodyDef.position.Set(0.0f, -10.0f); 
    b2Body* groundBody = m_world->CreateBody(&groundBodyDef); 
    b2PolygonShape groundShape; 
    groundShape.SetAsBox(50.0f, 10.0f); 
    groundBody->CreateFixture(&groundShape, 0.0f); 
    Box newBox; 
    newBox.init(m_world.get(), glm::vec2(0.0f, 14.0f), glm::vec2(15.0f, 15.0f)); 
    m_boxes.push_back(newBox); 

ウィンドウポップのアップ私のコンソール上に印刷された3210

エラー:

アサーションに失敗しました:エリア> 1.19209 2896e-07F、 path_to_unbuild_box2d \ box2d_v2.3.0 \ BOX2D \ BOX2D \衝突\形状\ polygonshape.cpp、ラインB2 422

エラーが発生した場所(私はRetryをクリックしたとき)ここでline 336 b2Fixture.hだ:

inline void b2Fixture::GetMassData(b2MassData* massData) const 
{ 
    m_shape->ComputeMass(massData, m_density); 
} 

問題1 Fiの(で述べたように、メッセージを「アサーション失敗」)

boxShape.SetAsBox(dimensions.x/2.0f, dimensions.y/2.0f); ///Instead of position. 

答えて

3

The line of code that's failing isをXED:

b2Assert(area > b2_epsilon); 

それはあなたのポリゴンはちっぽけなサイズを有することを意味する(アサーションを見て、面積は、1.192092896e-07F未満であります値は0.0000001192092896で、これは小さいです)。

おそらくboxShapeのサイズが無効です。行にブレークポイントを設定します。

boxShape.SetAsBox(position.x/2.0f, position.y/2.0f); 

positionの値を調べます。ボックスの寸法を正しい値に設定していることを確認してください。私の賭けは、あなたがいないということです。

+0

「position.x = 0」と「position.y = 14」の値がこれは無効ですか? – ASK

+0

考えてみましょう:幅0、高さ14のボックスを作成しようとしています。幅0のボックスは有効ですか? – Cornstalks

+0

私が 'dimension' – ASK

関連する問題