Iphone Cocos2d+;Box2d:如何使用VertexHelper生成无崩溃的顶点?

Iphone Cocos2d+;Box2d:如何使用VertexHelper生成无崩溃的顶点?,iphone,cocos2d-iphone,box2d,Iphone,Cocos2d Iphone,Box2d,代码: //上面的顶点列表由“VertexHelper”生成。代码有问题吗?正在获取崩溃..对于以下方法,Box2D支持的顶点数最多 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 /

代码:


//上面的顶点列表由“VertexHelper”生成。代码有问题吗?正在获取崩溃..

对于以下方法,Box2D支持的顶点数最多

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);
这个数字在b2_maxPolygonVertices中,我相信默认情况下,它将多边形形状中的顶点数限制为8个顶点

虽然您可能会增加该数字,但请记住,对于多边形形状,Box2D只允许8个顶点,可能有一个很好的原因(很可能是性能)。它很可能会影响一个指数函数,它的运行时间可能会因每个附加顶点而加倍


更好的解决方案是减少顶点的数量,或者将两个或更多形状附加到实体上,以构成实体的碰撞区域。

您可以指定更多详细信息吗?它是如何崩溃的(错误消息),你有stacktrace吗?你试过把问题孤立起来吗?如果没有,请通过使代码尽可能小来实现(也将使我们更容易提供帮助)。谢谢您,先生。现在我减少了顶点数,它工作得很好。
polyShapeDef.Set(verts,num);