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]
我正在将 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]