Box2D Farseer物理中心的质量与原点不一致

时间:2016-05-23 22:48:53

标签: c# xna box2d monogame farseer

我正在使用MonoGame的Farseer Physics库。

在我的游戏中,我使用复合多边形体,使用BodyFactory.CreateCompoundPolygon(...);创建,但它们有问题。

它们的起源位于左上角,而不是大多数Box2d对象的质心。由于我需要围绕与左上角不同的枢轴点旋转物体,我发现我可以改变物体的质心(Body.LocalCenter)。这样做很好,花花公子,我可以使用Body.ApplyAngularImpulse(...);或更改Body.AngularVelocity来旋转身体,但问题出现了:

使用我前面提到的方法改变身体的旋转工作正常,并且使用的轴心点是质心,但如果我尝试通过直接改变身体的旋转来旋转身体(Body.Rotation),它围绕左上角而不是质心旋转。 实际上,Body.Rotation += 1;围绕与Body.AngularVelocity = 1;

不同的轴心点旋转

你可能想知道为什么这是一个问题,为什么我不只是使用我之前提到的方法来旋转身体。问题是我需要能够检查身体的当前旋转。我无法想办法做到这一点。我无法使用Body.Rotation,因为它会围绕错误的点返回旋转。

TL; DR:Body.Rotation不会围绕质心返回旋转,如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果从相对于中心的点列表创建复合多边形,则可以正确设置枢轴和质心。

对于20个单位的广场:   而不是:[0,0] [20,0] [20,20] [ - 20,20]   使用:[ - 10,-10] [10,-10] [10,10] [ - 10,10]