我有一个b2PolygonShape身体并向它施加一个力。
_recbody-> ApplyForce(b2Vec2(6.0,-6.0),_ recbody-> GetWorldCenter());
我想将身体的旋转中心更改为身体前方。 因此,applyForce和碰撞使得身体不会在中心转动,而是在前面更多。
答案 0 :(得分:2)
我知道这是一个很老的帖子,但是从第一个答案构建,而不是使用SetAsBox(),你应该使用Set并定义框的顶点。我发现SetAtBox从中心创建,使用宽度和高度向所有4个边创建,所以无论你做什么,重心都将是形状的中心,但另一方面,如果你使用Set,即使你只是画一个盒子,你可以把它限制在一边。
例如:
int32 count = 4;
b2Vec2 vertices[] = {b2Vec2(sprite.contentSize.width/PTM_RATIO, 0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO,0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
b2Vec2(sprite.contentSize.width/PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
};
spriteShape.Set(vertices,count);
这将形成一个重心偏向左上角的形状,因为我们只画了右侧的多边形向下(没有超过[0,0]点)。
答案 1 :(得分:0)
在this forum中找到了这个 “无论你在哪里创建实际形状,都会从bodyDef.position.Set()坐标设置一个body的质心。如果你将boxDef.SetAsBox()坐标偏移所需的数量,这应该得到你效力了。“