Box2D Farseer Physics Center of Mass 和 origin 不一致

Box2D Farseer Physics Center of Mass and origin inconsistent

我正在将 Farseer Physics 库与 MonoGame 一起使用。

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

它们的原点在左上角,而不是像大多数 Box2d objects 那样的质心。由于我需要围绕与左上角不同的枢轴点旋转主体,我发现我可以更改 body (Body.LocalCenter) 的质心。这工作正常而且花花公子,我可以使用 Body.ApplyAngularImpulse(...); 或通过更改 Body.AngularVelocity 来旋转 body,但问题来了:

使用我之前提到的方法改变 body 的旋转效果很好,使用的轴心点是质心,但是如果我尝试通过直接改变来旋转 body它是旋转 (Body.Rotation),它围绕左上角而不是质心旋转。 所以实际上,Body.Rotation += 1; 围绕不同的枢轴点旋转而不是 Body.AngularVelocity = 1;

您可能想知道为什么这是一个问题,为什么我不直接使用我之前提到的方法来旋转 body。问题是我需要能够检查 body 的当前旋转。我想不出办法做到这一点。我不能使用 Body.Rotation,因为它 return 是围绕错误点的旋转。

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

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

对于 20 个单位的正方形: 而不是:[0,0][20,0][20,20][-20,20] 使用:[-10,-10][10,-10][10,10][-10,10]