我试图用box2d创建一个精确的轨道重力系统,基本上;我希望能够在地球上射击子弹,并且根据这颗子弹的速度,它将从地球上逃逸,停留在地球轨道上或者在地球表面上降落例如240度或45度。 (假设,子弹将在0度射击) 我做了很多研究,已经深入了解牛顿的物理定律等。 基本的applyforce似乎没有足够准确的工作。 我还找到了计算物体停留在轨道所需速度的公式,我设法在box2d内实现了这一点。但是,如果我想要阻止子弹,子弹就不会再落在地上。 (施加力用于径向重力,第二施加力用于将子弹移动到“右”)它将保持在轨道上。只有当我增加阻尼时,子弹才能回落到地上,但这对我来说似乎不对。当子弹与其他东西发生碰撞时,它也会受潮。
我认为这里的主要问题是修改子弹的速度。子弹需要一段时间才能降落:180度。子弹离地球表面的距离越远,在相同的时间内着陆180度所需的速度就越大。我认为速度是实现真正精确径向引力的关键,但我的问题是;这是真的吗,你们怎么想?有没有人有类似的情况? 如何在不使用阻尼和setlinearvelocity的情况下以最合适的方式控制速度?
我还希望能够控制让子弹绕轨道逃跑或降落在地球上所需的速度。这应该是可能的,因为还有一个计算轨道速度的公式。 例如。当它出错时,子弹移动得太快,会从地面逃脱,但会向后移动,因为地球引力会改变子弹的路径。
顺便说一下:我在互联网上搜索过很多东西,但是无法将这些东西真正地与实用的box2d代码联系起来,所以我希望有人可以指出正确的方向。 亲切的问候!答案 0 :(得分:3)
我发现这个http://www.emanueleferonato.com/2012/03/28/simulate-radial-gravity-also-know-as-planet-gravity-with-box2d-as-seen-on-angry-birds-space/给出了使用Box2D for ActionScript3进行径向引力(行星引力)的一个很好的例子,但可以很容易地移植到Box2D for C ++。还有几个Box2D示例用于做其他技巧。