在开始之前,我已经阅读this帖子,但它似乎并不适合我。我试图检查Arc2d对象和Ellipse2D对象之间的冲突。碰撞有效,但它将对象变成矩形。
public Arc2D a;
public Ellipse2D e;
public void aStuff() {
a = new Arc2D.Double(((getWidth() / 2) - (250 / 2)), (getHeight() - 135), 250, 265, 0, 180, Arc2D.CHORD);
}
public void eStuff() {
e = new Ellipse2D.Double((getWidth() / 2), y, 52, 55);
}
public boolean collisionCheck() {
if (a.getBounds2D().intersects(e.getBounds2d())) { // This is where it turns them into rectangles.
return true;
} else {
return false;
}
}
在我的计时器中改变" a"的位置。所以它与" e"它将检查布尔返回值并执行某些操作。
y += 5;
if (collisionCheck()) {
...
}
但此刻,我无法让检查部分正常工作。我能改变什么?我已经尝试使用形状对象并使用该区域,但它给我一个错误,说它不能从布尔值返回void值。任何帮助表示赞赏。
答案 0 :(得分:0)
我发现Area
对于进行形状碰撞比使用实际的Shape
本身更有用,我建立了一个实用程序,用于将Arcs构建为区域here。如果您有兴趣,可能需要查看此内容和Area
。
至于你的第二个问题,如果你摆脱了collisionCheck方法中的else {...}块,而只是在if {}块之后立即返回false,这可能会解决你的问题。