使物体以正确的方式保持在行星表面上

时间:2014-05-21 17:53:58

标签: c++ box2d game-physics

我使用Box2D来模拟在行星上行走的人。我计算了一个朝向行星中心的自定义引力,它除了一个小故障外它正常工作:我用作当前人围绕行星移动时旋转的物理模型的盒子。我希望它始终是正确的方式。你怎么建议我这样做?

当人的脚接触地面时,我已经考虑过采用重力矢量并计算切向量,但我不太清楚如何做到这一点。如果这是最好的方法,请您解释一下如何实现这一目标? Aren有没有更简单的方法?

1 个答案:

答案 0 :(得分:1)

有一种更简单的方法。

我假设通过"正确向上"你的意思是脚应该始终指向行星。

执行以下操作:

  • 在与行星相同的位置放置一个额外的圆形体(基本上是一个小圆圈,即#34;在内部"你的星球)。那个身体不应该与你的星球或你的玩家发生碰撞。
  • 通过旋转关节将此身体连接到您的行星,使其固定在同一位置,但可以旋转。
  • 通过棱柱关节将玩家连接到此身体,根据玩家相对于行星开始的位置设置轴(例如,如果玩家从行星顶部开始,将轴设置为(0,1))。

如果你这样做,棱柱关节应该保持你的播放器按照你想要的方式旋转。

如果您希望手动设置角度,我认为您可以使用atan2这样计算角度:

  

Math.atan2(planetPos.y - playerPos.y,planetPos.x - playerPos.x);

这将以度为单位计算角度。您必须将其转换为弧度才能在Box2D中使用它。