首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 遊戲精靈碰撞檢測:矩形邊界與像素級兩種算法實現

     編輯:J2ME

碰撞檢測分類

  1. 矩形邊界檢測:比較兩精靈 getWidth()/getHeight() 矩形是否相交。效率高、實現簡單,但非矩形精靈易產生誤判 (透明區重疊也視為碰撞)。
  2. 像素級檢測:檢測實際圖像像素 (非透明區) 是否重疊。精確度最高、任意形狀皆適用,但運算量大。

改進折衷:縮小碰撞矩形減少誤判,但可能漏報邊緣碰撞。

MIDP API 支援

Sprite 類提供三種 collidesWith 方法:

  • collidesWith(Sprite s, boolean pixelLevel):精靈間碰撞,pixelLevel=true 啟用像素級。
  • collidesWith(Image img, int x, int y, boolean pixelLevel):精靈與圖像碰撞。
  • collidesWith(TiledLayer layer, boolean pixelLevel):精靈與平鋪圖層 (如迷宮牆壁) 碰撞。

實戰代碼片段


// 玩家子彈擊中敵機
for (int i = 0; i < MAX_SHOT; i++) {
    for (int j = 0; j < MAX_ENEMY; j++) {
        if (playerShot[i].isVisible() &&
            playerShot[i].collidesWith(enemyShip[j], true)) { // 像素級
            // 碰撞處理:加分、敵機爆炸、子彈消失...
        }
    }
}

// 玩家與小飛機碰撞
for (int i = 0; i < MAX_SMALL_PLANE; i++) {
    if (smallPlane[i].isVisible() &&
        smallPlane[i].collidesWith(playerSprite, true)) {
        // 玩家扣血、重生...
    }
}

選擇建議

效能提示

  • 先用矩形快速剔除明顯不相交對象,再對候選對進行像素級精檢 (兩階段法)。
  • 避免在 paint() 中進行繁重碰撞運算,放在遊戲邏輯更新執行緒。

出處:原文連結

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
場景建議
大量簡單精靈 (子彈、方塊)矩形檢測 (false),效能優先
不規則造型、核心碰撞邏輯 (主角、Boss)像素級 (true),精確度優先
平台跳躍、迷宮邊界TiledLayer 碰撞