Box2d несколько приборов и позиционирования - PullRequest
15 голосов
/ 16 января 2011

Я пытаюсь создать U-образную форму в Box2d (в Cocos2d), соединяя 3 прямоугольника, например, так: | _ |

Похоже, что соединения не являются правильным решением здесь, так как я неЯ не хочу никаких движений, поэтому я создал основной корпус, который представляет собой средний бит и 2 крепления по бокам.Я добавил две стороны к среднему биту так:

mainBody->CreateFixture(&leftFixtureDef);
mainBody->CreateFixture(&rightFixtureDef);

Это работает, однако оба боковых светильника добавляются в центр основной части тела.Я не могу понять, как расположить светильники относительно основного корпуса.Присоединение спрайта / узла к устройству и изменение положения, кажется, не имеет значения.

Есть идеи?

Большое спасибо.

1 Ответ

29 голосов
/ 16 января 2011

это свойство формы.Я не нашел такого свойства для b2CircleShape, но для b2PolygonShape есть m_centroid параметр - это координаты центра формы относительно тела.Укажите, чтобы он имел правильную позицию фигуры.

Для b2PolyganShape есть метод setAsBox(w, h), но есть и более сложный:

setAsBox(float32 width, float32 height, const b2Vec2 &center, float32 rotation)

Используйте этот метод или укажите центроидmanualy.

Вот код для формы U

b2BodyDef bDef;
bDef.type = b2_dynamicBody;
bDef.position = b2Vec2(0, 0);
b2Body *body = world_->CreateBody(&bDef);

b2PolygonShape shape;
const float32 density = 10;

shape.SetAsBox(1, 0.1);
body->CreateFixture(&shape, density);

shape.SetAsBox(0.1, 1, b2Vec2(-1 + 0.1, 1), 0);
body->CreateFixture(&shape, density);

shape.SetAsBox(0.1, 1, b2Vec2(1 - 0.1, 1), 0);
body->CreateFixture(&shape, density);
...