Box2d多个灯具和定位

Giv*_*ivP 15 box2d cocos2d-iphone box2d-iphone

我试图通过连接3个矩形来在Box2d(在Cocos2d中)创建一个"U"形状:| _ |

这听起来像关节不是正确的解决方案因为我不想要任何动作所以我创造了一个主体,它是中间位和两个夹具的两侧.我已将这两个边添加到中间位,如下所示:

mainBody->CreateFixture(&leftFixtureDef);
mainBody->CreateFixture(&rightFixtureDef);
Run Code Online (Sandbox Code Playgroud)

这有效,但是两个侧面装置都被添加到mainBody的中心.我似乎无法弄清楚如何相对于主体定位灯具.将精灵/节点附加到夹具并改变位置似乎没有什么区别.

有任何想法吗?

非常感谢.

And*_*rew 29

它是形状的属性.我没有为b2CircleShape找到这样的属性,但是对于b2PolygonShapem_centroid参数 - 它是相对于身体的形状中心坐标.将其指定为具有形状的有效位置.

对于b2PolyganShape,有一种方法,setAsBox(w, h)但有更复杂的方法:

setAsBox(float32 width, float32 height, const b2Vec2 &center, float32 rotation)
Run Code Online (Sandbox Code Playgroud)

使用此方法或手动指定质心.

这是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);
Run Code Online (Sandbox Code Playgroud)

  • @Andrew:对于b2CircleShape,属性是m_p,即圆的中心位置. (8认同)