【问题标题】:box2d with custom polygon crashes带有自定义多边形崩溃的 box2d
【发布时间】:2011-09-25 14:25:04
【问题描述】:

我创建了一个有 5 个顶点的多边形,所有的顶点都是由 VertexHelper 生成的。

为什么程序在 b2PolygonShape.cpp 的 ComputeCentroid() 中的 b2Assert(area > b2_epsilon) 处获得 SIGABRT?

当我使用 shape.SetAsBox(.359375, 1.0) 而不是 shape.Set(vertices, count) 时,程序运行良好。

使用shape.Set()计算质心的时候好像有问题,不知道怎么处理。

代码如下:

b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.awake = NO;
bodyDef.position.Set(3.125, 3.125);
bodyDef.angle = -.785398163397;
spriteBody = world->CreateBody(&bodyDef);
spriteBody->SetUserData(sprite);
b2MassData massData = {2.0, b2Vec2(0.021875, 0.203125), 0.0};
spriteBody->SetMassData(&massData);
int32 count = 5;
b2Vec2 vertices[] = {
    b2Vec2(-11.5f / PTM_RATIO, -16.0f / PTM_RATIO),
    b2Vec2(-10.5f / PTM_RATIO, 15.0f / PTM_RATIO),
    b2Vec2(10.5f / PTM_RATIO, 15.0f / PTM_RATIO),
    b2Vec2(10.5f / PTM_RATIO, -5.0f / PTM_RATIO),
    b2Vec2(-5.5f / PTM_RATIO, -16.0f / PTM_RATIO)
};
b2PolygonShape shape;
shape.Set(vertices, count);
b2FixtureDef fixtureDef;
fixtureDef.shape = &shape;
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.2f;
fixtureDef.restitution = 0.7f;
spriteBody->CreateFixture(&fixtureDef);

【问题讨论】:

    标签: ios objective-c cocoa-touch cocos2d-iphone box2d


    【解决方案1】:

    看起来您以错误的方式缠绕顶点。我认为它们在 box2d 中应该是逆时针的,至少在默认情况下是这样。

    您的断言将失败,因为面积的计算将返回负值,远小于b2_epsilon

    【讨论】:

    • 我把它逆时针放了,它起作用了。非常感谢你。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 2014-06-21
    相关资源
    最近更新 更多