2011-02-13 91 views
0

我有一个b2PolygonShape身体,并对其施加一个力。更改旋转中心box2d

_recbody-> ApplyForce(b2Vec2(6.0,-6.0),_recbody-> GetWorldCenter());

我想改变身体的旋转中心,使其更多地位于身体的前方。 因此,applyForce和碰撞使身体不会在中心转向,而在前面更多。

+0

定义了2d对象的“前”...因为在我看来,它是平坦的,所以只有左,右,上和下。此外,这是什么语言? – Joe 2011-02-13 11:18:53

回答

0

this forum 发现这个“身体的质心将会从bodyDef.position.Set()设置)坐标,无论在哪里创建实际的形状。如果偏移boxDef.SetAsBox(坐标按照所需的金额,这应该得到你以后的效果。“

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 ]点)。