断言失败:面积 > 1.19209
Assertion failed : area > 1.19209
当我 运行 我的程序使用 Box2D
时,我遇到了这个奇怪的错误,这真的出乎意料,因为它在一个与我的项目无关的文件中(未构建的文件夹未链接到我的项目)。我为 VS12
获得了 Box2D
的副本,并为我的项目构建了它,并按照此处的教程设置项目:https://www.youtube.com/watch?v=kEClRFKyGkw&list=PLSPw4ASQYyymu3PfG9gxywSPghnSMiOAW&index=53
这是我的代码:
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);
}
我在哪里调用 init()
:
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 window 弹出如下:
我的控制台上打印的错误:
Assertion failed : area > 1.19209 2896e-07F,
path_to_unbuild_box2d\box2d_v2.3.0\box2d\box2d\collision\shapes\b2
polygonshape.cpp, line 422
这是错误发生的地方(当我点击 Retry
时)line 336 b2Fixture.h
:
inline void b2Fixture::GetMassData(b2MassData* massData) const
{
m_shape->ComputeMass(massData, m_density);
}
问题 1 已解决
boxShape.SetAsBox(dimensions.x / 2.0f, dimensions.y / 2.0f); ///Instead of position.
The line of code that's failing is(如 "Assertion failed" 消息中所述):
b2Assert(area > b2_epsilon);
说明你的多边形很小(看断言,面积小于1.192092896e-07F
,也就是值0.0000001192092896
,很小)。
可能 boxShape
的大小无效。在行上设置断点:
boxShape.SetAsBox(position.x / 2.0f, position.y / 2.0f);
并检查 position
的值。确保将框的尺寸设置为合理的值。我敢打赌你不是。
当我 运行 我的程序使用 Box2D
时,我遇到了这个奇怪的错误,这真的出乎意料,因为它在一个与我的项目无关的文件中(未构建的文件夹未链接到我的项目)。我为 VS12
获得了 Box2D
的副本,并为我的项目构建了它,并按照此处的教程设置项目:https://www.youtube.com/watch?v=kEClRFKyGkw&list=PLSPw4ASQYyymu3PfG9gxywSPghnSMiOAW&index=53
这是我的代码:
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);
}
我在哪里调用 init()
:
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 window 弹出如下:
我的控制台上打印的错误:
Assertion failed : area > 1.19209 2896e-07F, path_to_unbuild_box2d\box2d_v2.3.0\box2d\box2d\collision\shapes\b2 polygonshape.cpp, line 422
这是错误发生的地方(当我点击 Retry
时)line 336 b2Fixture.h
:
inline void b2Fixture::GetMassData(b2MassData* massData) const
{
m_shape->ComputeMass(massData, m_density);
}
问题 1 已解决
boxShape.SetAsBox(dimensions.x / 2.0f, dimensions.y / 2.0f); ///Instead of position.
The line of code that's failing is(如 "Assertion failed" 消息中所述):
b2Assert(area > b2_epsilon);
说明你的多边形很小(看断言,面积小于1.192092896e-07F
,也就是值0.0000001192092896
,很小)。
可能 boxShape
的大小无效。在行上设置断点:
boxShape.SetAsBox(position.x / 2.0f, position.y / 2.0f);
并检查 position
的值。确保将框的尺寸设置为合理的值。我敢打赌你不是。