我在 Java 中实现了一些相当简单的 2D 碰撞检测,我对如何确定碰撞发生在哪个表面(或碰撞框的一侧)有点困惑。
我浏览了这个网站上的问题,并在其他地方尝试了广泛的 Google-fu,最接近我的是这样的:
public Side getCollisionSide(Rectangle main, Rectangle incoming) {
boolean toTheLeft = main.getX() - incoming.getX() < 0;
boolean toTheTop = main.getY() - incoming.getY() < 0;
// ...but what can I do from here?
}
问题是这实际上并没有给出与哪一方相撞。它可以告诉我碰撞发生在哪个象限,在原点设置为main
' 坐标的网格中。但是如果一个物体main
从左侧撞击(并且恰好在 Y 轴上的区域中较低),我无法使用这种方法知道碰撞是从左侧还是从底部发生的。
有谁知道这个的解决方案,甚至只是一个不同的实现?
我看到拥有速度和方向信息是如何带来好处的(甚至是一种解决方案,如果对象一次只能通过一个维度)。但是,如果对象可以对角移动,我看不出如何逃避同样的问题。