我正在使用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
不会围绕质心返回旋转,如何解决这个问题?
答案 0 :(得分:1)
如果从相对于中心的点列表创建复合多边形,则可以正确设置枢轴和质心。
对于20个单位的广场: 而不是:[0,0] [20,0] [20,20] [ - 20,20] 使用:[ - 10,-10] [10,-10] [10,10] [ - 10,10]