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

2021-09-21 23:44:54 字數 1900 閱讀 3480

碰撞檢測又稱為衝突檢測,是確定精靈之間是否相互衝突的一種方法。碰撞檢測用來確定精靈之間何時會發生物理的相互作用。例如,在遊戲中,如果玩家精靈與小飛機精靈發生碰撞,玩家生命值將會降低。碰撞檢測就是用來檢測玩家與敵方(或子彈)是否發生碰撞的一種機制。在遊戲設計中,有很多種方法可以處理碰撞檢測。最簡單的方法就是比較每個精靈的矩形邊界和其他精靈的矩形邊界是否交叉。這種方法效率很高,但是也有一種問題,比如並不是所有的精靈都是矩形的,當他們相互較近的錯過的時候,可能會引起一定程度的錯誤。可能因為邊角的重疊引起衝突,而實際上只是透明區域的重疊。精靈的形狀越不接近矩形,就會有越多的錯誤型別。可以想象矩形碰撞檢測是多麼的簡單而不夠精確,除非本來使用的精靈恰恰是矩形的。對這項技術的乙個改進方法就是將衝突矩形縮小,從而減少錯誤。這種方法使情況略有改善,但是又有可能引發其他可能的潛在錯誤,就是允許精靈在某些情況下出現重合而不發出衝突訊號。縮小後的矩形碰撞和簡單矩形碰撞一樣有效,因為所做的只是比較矩形是否相交。目前最有效的碰撞檢測就是根據精靈影象資料來檢測碰撞(即畫素檢測方法),這種方法實際上不是察看精靈的透明區域是否重合而是精靈影象本身是否重合。在這種情況下,只有當精靈影象重合時,才會獲得乙個碰撞衝突。這種是理想的碰撞檢測技術,因為其十分的精確,並且對於

任何形狀的物件的相互移動都不會發生錯誤。

模擬矩形碰撞檢測示意圖

如果沒有碰撞檢測演算法,在本遊戲執行過程中,就會出現一種可怕的局面,雖然可以實現背景的移動,以及玩家飛機行駛的效果,而且玩家也可以控制機體的前進方向,但卻會存在乙個致使的缺陷——當敵方飛機被我方飛機擊中時,沒有任何響應,敵方飛機依舊行駛,分值沒有任何增加,好像什麼都沒有發生一樣。這都是因為沒有為遊戲新增碰撞檢測的**所致。碰撞檢測是遊戲中經常使用的一種重要演算法。由於檢測遊戲中的兩物體是否發生表面接觸。例如子彈是否命中敵機,敵機與玩家飛機是否相撞等。只有進行了碰撞檢測才有可能在出現上述情況後將敵機擊中,並且分值有所增加等效果。

使用midp api

來碰撞衝突,可以使用

sprite

類中的一系列方法,所有這些方法都叫做

collideswith()

。collideswith()

方法包括三種,第乙個

collideswith()

方法檢測的是兩個精靈之間的碰撞:

collideswith(sprite s,boolean pixellevel);

要檢測乙個衝突,只要在精靈上呼叫這個方法,並傳入另乙個精靈。第2個引數決定了衝突檢測是否按照「畫素連著畫素」的方法,這就相當於影象資料檢測方法。如果只是希望使用簡單的矩形檢測法在兩個精靈之間進行檢測,則可以把

false

值傳遞給

collideswith

()方法。

其餘兩種方法分別使用乙個影象和乙個平鋪的圖層來檢測乙個精靈的衝突。在使用影象的情況下,指定了影象的

xy位置,並且,碰撞檢測在影象和精靈上執行。平鋪的圖層和精靈相似,但是它使用多個平鋪影象來建立乙個大的合成影象,如使用乙個平鋪圖層來建立乙個圍牆式的迷宮,然後檢測它乙個精靈的衝突,以確保精靈位於範圍之內。

實現碰撞檢測**如下:

/*判斷enemyship是否被玩家子彈擊中*/

for(

int i=0;ifor(

int j=0;jif((playershot[i].isvisible()) && 

(playershot[i].collideswith(enemyship[j],

true))) 

………… 

//檢視玩家是否與小飛機相撞 

for(

int i=0;i<

this.max_sp;i++) 

if(smallplane[i].isvisible() &&    

smallplane[i].collideswith(playersprite,

true)) 

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

j2me 中的基礎碰撞檢測演算法 出自 http blog.csdn.net mailbomb 在遊戲中,經常需要進行碰撞檢測的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果做出不同的處理。進行碰撞檢測的物體可能有些的形狀和複雜,這些需要進行組...

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

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

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

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