2016-05-25 17 views
3

Ich bekomme diesen seltsamen Fehler, wenn ich mein Programm, das Box2D verwendet, was wirklich unerwartet ist, weil es in einer Datei ist, die nirgends mit meinem Projekt verbunden ist (unbuilt Ordner nicht mit meinem Projekt verknüpft). Ich erhielt eine Kopie für Box2D für VS12 und baute es für mein Projekt und Setup-ed das Projekt nach einem Tutorial hier: https://www.youtube.com/watch?v=kEClRFKyGkw&list=PLSPw4ASQYyymu3PfG9gxywSPghnSMiOAW&index=53Assertion fehlgeschlagen: Bereich> 1.19209

Hier ist mein Code:

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); 
} 

Wo ich die init() genannt habe:

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); 

A bis Fenster Pop wie folgt aus: Debug Error

Der Fehler auf meiner Konsole ausgegeben:

Assertion failed: Bereich> 1,19209 2896e-07F, path_to_unbuild_box2d \ box2d_v2.3.0 \ box2d \ box2d \ Kollision \ Formen \ b2 polygonshape.cpp, Linie 422

Hier ist, wo der Fehler auftritt (wenn ich auf Retry) line 336 b2Fixture.h:

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

Problem 1 fi feste

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

Antwort

3

The line of code that's failing is (wie in der erwähnten "Assertion fehlgeschlagen" Nachricht):

b2Assert(area > b2_epsilon); 

Es bedeutet, dass Ihr Polygon eine kümmerliche Größe hat (Blick auf die Behauptung, der Bereich ist weniger als 1.192092896e-07F, Das ist der Wert 0.0000001192092896, der winzig ist).

Wahrscheinlich boxShape hat die ungültige Größe. Legen Sie einen Haltepunkt in der Zeile:

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

und den Wert von position inspizieren. Stellen Sie sicher, dass Sie die Abmessungen der Box auf einen vernünftigen Wert festlegen. Meine Wette ist, dass du es nicht bist.

+0

der Wert von 'position.x = 0' und' position.y = 14' ist das ungültig? – ASK

+0

Denken Sie darüber nach: Sie versuchen, eine Box mit einer Breite von 0 und einer Höhe von 14 zu erstellen. Ist eine Box mit einer Breite von 0 gültig? – Cornstalks

+0

danke das war ein logischer Fehler Ich musste 'Dimension' – ASK

Verwandte Themen