2015-01-09 101 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

相關問題