C++ 将物体保持在行星表面的正确位置
我用Box2D模拟一个人在行星上行走。我计算了一个朝向行星中心的自定义重力,它工作正常,除了一个小问题:我使用的盒子作为人的物理模型,它在绕行星移动时旋转。我希望它总是正确的上升方向。你建议我怎么做C++ 将物体保持在行星表面的正确位置,c++,box2d,game-physics,C++,Box2d,Game Physics,我用Box2D模拟一个人在行星上行走。我计算了一个朝向行星中心的自定义重力,它工作正常,除了一个小问题:我使用的盒子作为人的物理模型,它在绕行星移动时旋转。我希望它总是正确的上升方向。你建议我怎么做 我考虑过当人的脚接触地面时,取重力向量并计算切向向量,但我不太确定怎么做。如果这是最好的办法,你能解释一下如何做到这一点吗?没有更简单的方法吗?有更简单的方法 我假设“向上走”的意思是脚应该始终指向行星 请执行以下操作: 将一个额外的圆形物体放置在与你的行星相同的位置(基本上是一个“在”你的行星内
我考虑过当人的脚接触地面时,取重力向量并计算切向向量,但我不太确定怎么做。如果这是最好的办法,你能解释一下如何做到这一点吗?没有更简单的方法吗?有更简单的方法 我假设“向上走”的意思是脚应该始终指向行星 请执行以下操作:
- 将一个额外的圆形物体放置在与你的行星相同的位置(基本上是一个“在”你的行星内部的小圆圈)。这个身体既不应该与你的星球发生碰撞,也不应该与你的玩家发生碰撞
- 通过旋转关节将这个身体连接到你的行星上,使它保持固定在相同的位置,但可以旋转
- 通过棱柱关节将玩家连接到此身体,根据玩家相对于行星的起始位置设置轴(例如,如果玩家从行星顶部开始,则将轴设置为(0,1))李>
这将以度为单位计算角度。您必须将其转换为弧度才能在Box2D中使用。谢谢。这似乎是一个合理的解决方案,尽管我还没有尝试过。我现在选择了一个更三角的解决方案,因为当我们有多个“行星”在附近时,这似乎效果更好。