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

J2ME 2D 遊戲開發入門(三):玩家飛機控制與背景滾動渲染

     編輯:Java 相關知識

實現玩家飛機響應式控制 (鍵盤輸入 → 幀更新) 與平鋪背景渲染,構建遊戲核心循環雛形。

1. 幀率選擇與主循環

  • 目標:15-18 FPS (約 50-60ms/幀)。模擬器可達 20+,實機 12-15 較穩定。
  • 單線程循環:輸入 → 邏輯 → 渲染 → 睡眠補齊幀時間。

2. 飛機實體:三幀動畫 (正常/左傾/右傾)

// 初始化
Image img = ImageTools.getImage("/pic/MyPlaneFrames.png"); // 寬24 高24 三幀橫排
plane = new GameObject(img, 24, 24);

// 重置置中
plane.reset();
plane.moveto((screenW-24)/2, (screenH-24)/2);

// 主循環渲染
plane.paint(g);

3. 輸入處理與狀態驅動動畫

if (!gameOver) {
    if (keyEvent) { // 有按鍵按下
        if (keyUp)    { plane.move(0, -3); plane.sprite.setFrame(0); } // 正常幀
        if (keyDown)  { plane.move(0,  3); plane.sprite.setFrame(0); }
        if (keyLeft)  { plane.move(-3, 0); plane.sprite.setFrame(1); } // 左傾幀
        if (keyRight) { plane.move( 3, 0); plane.sprite.setFrame(2); } // 右傾幀
        if (keyFire)  { /* 開火邏輯 */ }
    } else { // 無輸入
        plane.sprite.setFrame(0); // 恢復正常幀
    }
}

關鍵點:setFrame(index) 直接切換 Sprite 幀,實現即時視覺反饋。若需「左移播放轉向動畫」,需擴展 GameObject 支持幀序列播放。

4. 背景渲染:TiledLayer 平鋪海面

// 初始化
Image bgImg = ImageTools.getImage("/pic/back_water.png"); // 單張小圖
int cols = screenW / bgImg.getWidth() + 1;
int rows = screenH / bgImg.getHeight() + 1;
background = new TiledLayer(cols, rows, bgImg, bgImg.getWidth(), bgImg.getHeight());

// 填充單元格
for (int i=0; i

5. 為何不使用 LayerManager?

  • LayerManager 以 Layer 為單位統一調用 paint,一個 Layer 只能對應一個 Sprite 位置。
  • 子彈群需要一個 Sprite 繪製多個位置 (對象池模式),與 LayerManager 模型衝突。
  • 手動控制繪製順序 (背景 → 特效 → 實體 → UI) 更靈活、開銷更低。

6. 當前架構局限 (預告重構方向)

  • 飛機邏輯硬編碼在主循環,無狀態機。
  • 輸入、邏輯、渲染耦合在單線程。
  • 無場景管理 (菜單、暫停、結算)。

下一篇將實現子彈群與碰撞檢測,完成核心玩法閉環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved