J2ME中的基礎碰撞檢測演算法

2021-04-01 23:02:32 字數 1389 閱讀 6163

j2me

中的基礎碰撞檢測演算法

出自:http://blog.csdn.net/mailbomb

在遊戲中,經常需要進行碰撞檢測的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果做出不同的處理。

進行碰撞檢測的物體可能有些的形狀和複雜,這些需要進行組合碰撞檢測,就是將複雜的物體處理成乙個乙個的基本形狀的組合,然後分別進行不同的檢測。

下面簡單介紹一下兩種最基本的形狀進行碰撞的時候進行的處理。

1、矩形和矩形進行碰撞

一般規則的物體碰撞都可以處理成矩形碰撞,實現的原理就是檢測兩個矩形是否重疊。我們假設矩形

1的引數是:左上角的座標是

(x1,y1)

,寬度是

w1,高度是

h1;矩形

2的引數是:左上角的座標是

(x2,y2)

,寬度是

w2,高度是h2。

在檢測時,數學上可以處理成比較中心點的座標在x和

y方向上的距離和寬度的關係。即兩個矩形中心點在

x方向的距離的絕對值小於等於矩形寬度和的二分之一,同時

y方向的距離的絕對值小於等於矩形高度和的二分之一。下面是數學表示式:

x方向:

| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|

y方向:

| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|

在程式中,只需要將上面的條件轉換成**就可以實現了。

但是矩形碰撞只是一種比較粗糙的碰撞檢測方法,因為很多實際的物體可能不是乙個規則的矩形。

下面介紹一下圓形碰撞。

2、圓形和圓形的碰撞

圓形和圓形的碰撞應該說是一種最簡單的碰撞,因為在數學上對於兩個圓形是否發生重疊,有計算兩個圓心之間的距離的公式。那麼條件就變為:計算兩個圓心之間的距離是否小於兩個圓的半徑和。

假設圓形

1的左上角座標是

(x1,y1)

,半徑是

r1,圓形

2的左上角的座標是

(x2,y2)

,半徑是r2。

因為midp1.0

中沒有浮點數,而且浮點數的運算比較慢,所以我們將條件做乙個簡單的變換:對於條件的兩邊都進行平方,這樣就去掉了開方的運算步驟。

下面是數學表示式:

(x1 – x2)

2+ (y1 – y2)

2< (r1 + r2)

2在程式中,只需要將上面的條件轉換成**就可以了。

上面介紹的只是最基本的碰撞檢測演算法的實現,而實際的程式設計過程中遇到的碰撞檢測問題要比這些複雜很多,還需要其他形式的檢測,還需要進行更加深入的學習。

email:[email protected]

J2ME中的基礎碰撞檢測演算法

出自 在遊戲中,經常需要進行碰撞檢測的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果做出不同的處理。進行碰撞檢測的物體可能有些的形狀和複雜,這些需要進行組合碰撞檢測,就是將複雜的物體處理成乙個乙個的基本形狀的組合,然後分別進行不同的檢測。下面簡...

J2ME下的遊戲精靈的碰撞檢測

碰撞檢測又稱為衝突檢測,是確定精靈之間是否相互衝突的一種方法。碰撞檢測用來確定精靈之間何時會發生物理的相互作用。例如,在遊戲中,如果玩家精靈與小飛機精靈發生碰撞,玩家生命值將會降低。碰撞檢測就是用來檢測玩家與敵方 或子彈 是否發生碰撞的一種機制。在遊戲設計中,有很多種方法可以處理碰撞檢測。最簡單的方...

J2me 矩陣相交檢測,矩陣碰撞檢測,點與矩陣檢測

j2me 矩陣相交檢測,矩陣碰撞檢測,點與矩陣檢測 在midp1.0中,我們不能像midp2.0中的sprite類一樣有很方便的碰撞函式可以使用,我們只能自己來寫 實現。常見的碰撞檢測的方式是基於矩形的碰撞,因為我們的都是矩形的。檢測矩形碰撞的一種方式是看乙個矩形的4個角是否進入另乙個矩形內。假如我...