一尘不染

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

java

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

我在这里寻找并寻找相似的东西,但没有真正找到任何东西。抱歉,如果这是重复的话。


阅读 218

收藏
2020-12-03

共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,但添加了一些潜在有用的方法

2020-12-03