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

J2ME 2D 遊戲入門之旅(四):子彈群管理與碰撞檢測

     編輯:J2ME

設計目標

飛機遊戲中子彈數量大、頻繁生成銷毀,若每顆子彈對應一個 Sprite 會嚴重消耗記憶體。解決方案:共享單一 Sprite,以二維陣列管理子彈狀態。

Bullets 類別核心結構

public class Bullets extends GameObject {
    private int[][] bullets; // [index][0:type, 1:x, 2:y, 3:vx, 4:vy, 5:alive]
    private int bulletsTotal;
    private Random rnd;
    public static final int TYPE_LEFT=0, TYPE_RIGHT=1, TYPE_TOP=2, TYPE_BOTTOM=3;
    private int screenW, screenH;

    public Bullets(Image img, int pw, int ph, int total, int w, int h) {
        super(img, pw, ph);
        bulletsTotal = total;
        bullets = new int[total][6];
        rnd = new Random();
        screenW = w; screenH = h;
    }

    public void initBullets() { for(int i=0;i screenW+5) bullets[i][3] *= -1;
        if (bullets[i][2] < -5 || bullets[i][2] > screenH+5) bullets[i][4] *= -1;
    }

    public void paint(Graphics g) {
        for (int i=0; i

關鍵設計點

  1. 狀態陣列:六欄位完整描述子彈,避免建立大量物件。
  2. Sprite 重用:繪製前以 setPosition() 移動共享 Sprite,極大降低記憶體壓力。
  3. 半徑碰撞:以中心點距離判斷,比邊框碰撞精確、比像素碰撞高效。
  4. 線性遍歷:適合子彈數量固定、邏輯簡單的場景;若子彈種類多、數量大,需引入空間分割(如網格/四叉樹)。

公開介面總結

  • Bullets(Image, pw, ph, total, w, h) 建構子
  • initBullets() 初始化全群
  • paint(Graphics) 繪製全群
  • refreshBullets(Sprite, boolean) 邏輯更新與碰撞檢測
  • killBullets(Sprite, int) 範圍清除(導彈道具)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved