代码:
b2PolygonShape polyShapeDef;
int num = 19;
b2Vec2 verts[] = {
b2Vec2(-6.5f / PTM_RATIO, -29.5f / PTM_RATIO),
b2Vec2(-31.5f / PTM_RATIO, 3.5f / PTM_RATIO),
b2Vec2(-31.5f / PTM_RATIO, 5.5f / PTM_RATIO),
b2Vec2(-30.5f / PTM_RATIO, 9.5f / PTM_RATIO),
b2Vec2(-27.5f / PTM_RATIO, 15.5f / PTM_RATIO),
b2Vec2(-20.5f / PTM_RATIO, 22.5f / PTM_RATIO),
b2Vec2(-17.5f / PTM_RATIO, 24.5f / PTM_RATIO),
b2Vec2(-13.5f / PTM_RATIO, 26.5f / PTM_RATIO),
b2Vec2(-10.5f / PTM_RATIO, 27.5f / PTM_RATIO),
b2Vec2(-5.5f / PTM_RATIO, 28.5f / PTM_RATIO),
b2Vec2(3.5f / PTM_RATIO, 28.5f / PTM_RATIO),
b2Vec2(8.5f / PTM_RATIO, 27.5f / PTM_RATIO),
b2Vec2(11.5f / PTM_RATIO, 26.5f / PTM_RATIO),
b2Vec2(17.5f / PTM_RATIO, 23.5f / PTM_RATIO),
b2Vec2(25.5f / PTM_RATIO, 15.5f / PTM_RATIO),
b2Vec2(28.5f / PTM_RATIO, 9.5f / PTM_RATIO),
b2Vec2(29.5f / PTM_RATIO, 6.5f / PTM_RATIO),
b2Vec2(29.5f / PTM_RATIO, 2.5f / PTM_RATIO),
b2Vec2(2.5f / PTM_RATIO, -29.5f / PTM_RATIO)
};
polyShapeDef.Set(verts,num);
polyShapeDef.m_vertexCount = num ;
b2BodyDef polyBodyDef;
polyBodyDef.type = b2_dynamicBody;
polyBodyDef.userData = inSprite;
polyBodyDef.position.Set(inSprite.position.x/PTM_RATIO, inSprite.position.y/PTM_RATIO);
b2Body *parachutBody = world->CreateBody(&polyBodyDef);
b2FixtureDef polyFixtureDef; // Define the fixture
polyFixtureDef.shape = &polyShapeDef;
polyFixtureDef.density = 20.0f;
polyFixtureDef.friction = 0.9f;
parachutBody->CreateFixture(&polyFixtureDef);
//顶点列表由'VertexHelper'生成。代码有什么问题吗?越来越崩溃..
答案 0 :(得分:3)
Box2D支持的最大顶点数量为
等方法polyShapeDef.Set(verts,num);
此数字位于b2_maxPolygonVertices
,我相信默认情况下它会将多边形形状中的顶点数限制为8个顶点。
虽然你可能会增加这个数字,但请记住,为什么Box2D只允许8个顶点用于多边形形状,这可能是一个很好的理由(很可能是:性能)。它可以很好地影响指数函数,其运行时间可以为每个额外的顶点加倍。
更好的解决方案是减少顶点的数量,或者将两个或多个形状附加到身体以构成身体的碰撞区域。