2015-01-09 102 views
-1

在我开始之前,我已阅读this后,但它似乎并不适用于我。我正在尝试检查Arc2d对象和Ellipse2D对象之间的碰撞。碰撞的作用,但它把对象变成矩形。Ellipse2D对象和Arc2d对象之间的碰撞检测

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; 
    } 
} 

在我的计时器,它改变了“一”,所以它与“E”发生碰撞,它会检查布尔返回值,并做一些位置。

y += 5; 
if (collisionCheck()) { 
    ... 
} 

但是目前,我无法让检查部分正常工作。我可以改变什么。我曾尝试使用形状对象和使用区域,但它给了我一个错误,说它不能从布尔值返回一个void值。任何帮助表示赞赏。

回答

0

我发现Area s比使用实际的Shape s本身更适用于做形状碰撞,并且我构建了一个用于构建弧区域的实用程序,作为区域here。如果你有兴趣,你可能想看看这个和Area

至于你的第二个问题,如果你在collisionCheck方法中除掉else {...}块,而是在if {}块之后立即返回false,这可能会解决你的问题。

+0

我试过使用区域,但它给了我这个错误:类型不匹配:不能从void转换为布尔值。 – Thomas 2015-01-09 21:30:48