如何防止精灵以一定的角度移动,导致碰撞

我有两个可以以任何角度移动的小精灵。 精灵是矩形的。

我为这两个精灵创建了边界框。 每当精灵旋转时,这些框就会旋转。 他们总是围绕精灵,只有精灵。 (完全适合)。

我已经成功地实现了两个边界框的碰撞检测。 我通过检查box1是否包含box2的任何顶点以及相反的方法来做到这一点。 (我知道这种方式并不完美,因为两个矩形可以相互交叉,而不需要彼此的顶点,但是为了我的需要,这已经足够了)。 所以现在我知道两个精灵的相撞时间。

但是当两个精灵发生碰撞时,我遇到了一个问题。

当这些精灵碰撞时,我想阻止它们相互重叠(超过几个像素)。 换句话说,在碰撞时,我想让精灵只能朝着不会深入其他精灵的方向移动。

正如我所说,每个精灵都可以任意角度自由移动(游戏是为两个玩家,每个控制一个精灵)。

编辑:以不同的方式说话 – 两个精灵碰撞后,我需要找出精灵可以移动的角度范围,这将允许它移出碰撞 – 这是我可以防止用户移动在任何其他角度,在碰撞后的精灵。

我怎样才能做到这一点? 感谢您的帮助

终于find了解决办法!

这个解决scheme并不完美,有时精灵有点卡住了。 但是这并不涉及像我这样的人一起奋斗的所有math内容。 我分享这个,因为它可能会帮助别人。

每当我移动一个精灵,我将它保存在一个variables的前一个位置。 如果精灵发生碰撞,我将它的位置重置到碰撞前的位置。 这将使精灵只返回一小部分像素,所以“反弹”将不会显而易见。 这将防止精灵重叠其他精灵。

感谢那些试图帮助:)