【问题标题】:Keep object the right way up on the surface of a planet保持物体在行星表面的正确方向
【发布时间】:2014-05-21 17:53:58
【问题描述】:

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

我曾考虑在人的脚接触地面时获取重力矢量并计算切向矢量,但我不太确定如何做到这一点。如果这是最好的方法,你能解释一下如何实现吗?没有更简单的方法吗?

【问题讨论】:

    标签: c++ box2d game-physics


    【解决方案1】:

    有一个更简单的方法。

    我假设“正确向上”是指脚应该始终指向地球。

    执行以下操作:

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

    如果你这样做了,棱柱关节应该负责让你的玩家按照你想要的方式旋转。

    如果您喜欢手动设置角度,我认为您可以使用atan2 计算角度,如下所示:

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

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

    【讨论】:

    • 谢谢。这似乎是一个合理的解决方案,虽然我还没有尝试过。我现在选择了更三角函数的解决方案,因为当我们附近有多个“行星”时,这似乎效果更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多