两个 Shape 对象之间的 Java 冲突检测?

2022-09-03 00:27:02

我想知道判断 Shape 对象是否与另一个形状相交的最佳方法。目前,我在游戏中对碰撞检测进行了整理,只要它涉及与矩形相交的形状,反之亦然。我遇到的问题是,Shape 类中的 intersects() 方法只能将矩形或点作为参数,而不能采用另一个 Shape。有没有一种有效的方法来测试两个 Shape 对象是否以任何方式重叠?我尝试的一种方法是使用 for 循环生成一个点区域来测试它们是否在形状中,然后构建一个 Point 对象数组以发送到另一个形状进行测试,但由于所有不必要的比较,这大大降低了我的帧速率。

我在这里寻找类似的东西,但没有找到任何东西。如果这是重复,请提前道歉。


答案 1

未测试,但为什么不:

import java.awt.geom.Area;

...

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
   Area areaA = new Area(shapeA);
   areaA.intersect(new Area(shapeB));
   return !areaA.isEmpty();
}

Area 实现了 Shape,但添加了一些可能有用的方法


答案 2

您还可以使用形状本身的边界,然后比较边界:

public boolean collidesWith(Shape other) {
    return shape.getBounds2D().intersects(other.getBounds2D());
}

这在眼睛上更好一些。