【问题标题】:Box2D Farseer Physics Center of Mass and origin inconsistentBox2D Farseer 物理质量中心和来源不一致
【发布时间】:2016-05-26 22:45:32
【问题描述】:

我在 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 不会返回围绕质心的旋转,如何解决这个问题?

【问题讨论】:

    标签: c# xna box2d monogame farseer


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多