2012-10-01 169 views
1

我正在創建2D遊戲。有很多由Bitmap創建的對象(橢圓,三角形等)。我要檢測碰撞。現在,我只能用這樣的rectange做到這一點:XY座標的約束

int x, y; 
... 
if(x>=bmp.getX() && x<=bmp.getX()+bmp.getWidth() 
    && y>=bmp.getY() && y<=bmp.getY()+bmp.getHeight()) { 
    //Collision. 
} 

但有一個問題:我不知道如何與另一個數字(橢圓形,三角形等)做到這一點。任何想法將不勝感激。謝謝。

+0

要麼與數學或與精靈檢測... –

+0

你有多少形狀,這些靜態或移動? – nikhil

+0

他們正在移動 – Nolesh

回答

0

對於橢圓你可以使用: -

if((Math.pow(x, 2)/Math.pow(a, 2)) + (Math.pow(y, 2)/Math.pow(b, 2)) < 1) { 
    /** Point (x, y) is inside Oval **/ 
} 

對於三角,這是一個有點簡單的任務: -

Visit this link

+0

謝謝。但是像汽車或飛機這樣的複雜物體呢? – Nolesh

+2

你真的想使用'^'(這是XOR)嗎?由於這是一個Java問題,請將其更改爲'Math.pow(x,2)'或留言。 – Baz

+0

@Baz ..感謝您指點巴茲..改變它.. –

2

一個簡單的解決方案是使用子矩形來計算碰撞。子矩形不會覆蓋整個對象,但它們可以覆蓋大部分對象。

此圖片應該說明我的意思,它使用幾個矩形的碰撞檢測飛機

enter image description here

另一種選擇(雖然不推薦),如果彩色像素每像素的撞色使用,在三角形中攔截一個橢圓形的顏色,然後發生碰撞。被警告這在計算上是昂貴的。

0

我遇到了與您相同的問題,但是使用了不規則形狀。我如何解決問題:

創建一個Shape類,其中包含一個Rectangles的列表。

首次創建遊戲對象時,應該將矩形添加到列表中,以便形成一個Shape。

現在用於碰撞檢測;而不是隻檢查一個矩形,遍歷列表中的所有矩形。

我希望這會有所幫助。