Cocos2d + Box2d: Как сделать генерацию вершин без сбоев с помощью VertexHelper? - PullRequest
1 голос
/ 15 декабря 2011

Код:

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. Что-то не так с кодом? терпеть крах ..

1 Ответ

3 голосов
/ 16 декабря 2011

Существует максимальное количество вершин, которые Box2D поддерживает для таких методов, как

polyShapeDef.Set(verts,num);

Это число в b2_maxPolygonVertices, и я считаю, что по умолчанию оно ограничивает количество вершин в форме многоугольника до 8 вершин.

Хотя вы можете увеличить это число, имейте в виду, что, вероятно, есть веская причина (скорее всего, производительность), почему Box2D допускает только 8 вершин для многоугольников. Это может очень хорошо повлиять на показательную функцию, время выполнения которой может удваиваться для каждой дополнительной вершины.

Лучшее решение - уменьшить количество вершин или прикрепить две или более фигур к телу, чтобы образовать область столкновения тела.

...