如何实现Box2d中多个装置的固定及定位?

在Box2d中,我想让矩形按照“U”字型,排成“|_|”的样式。但是,我不想只是进行移动的操作,这样,单纯的把它们连接到一起并不能达到我的预期想法。所以,我构建了一个main body,让它处于中间,然后两侧各搭建一个固定装置。具体实现方法如下:

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

虽然在mani body两侧添加了固定装置,但是仍然不能确切知道与固定物相关的main body的位置。在固定物上添加一个精灵或者一段代码都没有任何成效,那么,我该如何解决这个问题呢?

原问题:Box2d multiple fixtures and positioning

阅读 3.1k
1 个回答

答:Andrew
这应该涉及的是shape属性的问题。我没有找到b2CircleShape的正确属性,但是b2CircleShape中有一个m_centroid的参数,它是用来控制与body相关的中心坐标位置的。所以,精确它的数值便可得到shape的准确定位。谈到b2CircleShape,其中有一个setAsBox(w, h)的方法,除此之外,还有一个更复杂的方法:

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

所以,最好用这种方法,然后再次精确重心位置,所以我会采用如下代码,实现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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进