行動遊戲分類與選擇 Java
- 嵌入式、SMS、瀏覽器遊戲 (主流):豐富多媒體、低成本、支援離線/線上。
- Java (J2ME/MIDP) 為首選:工業標準、免費開放、Write Once Run Anywhere、輕量安全、MIDP 2.0 內建 Game API。
MIDP 2.0 遊戲開發核心 API
javax.microedition.midlet:MIDlet 基類,生命週期管理。
javax.microedition.lcdui:UI 元件 (Screen, Form, Canvas 等)。
javax.microedition.lcdui.game:遊戲專用 — GameCanvas、Sprite、Layer、LayerManager、TiledLayer。
遊戲主架構:HardDrive 範例
MIDlet 類別:HardDriveMIDlet
- 繼承
MIDlet,實作 CommandListener。
- 管理多個 Canvas:
GameCanvas (遊戲主畫面)、Canvas (開始/結束/說明畫面)。
- 生命週期方法:
startApp() 初始化並顯示遊戲 Canvas,pauseApp()、destroyApp() 釋放資源。
遊戲畫布:HardDriveCanvas (extends GameCanvas)
- 實作
Runnable,獨立執行緒跑遊戲迴圈。
GameCanvas 提供離屏緩衝 (getGraphics()) 實現流暢動畫。
- 遊戲迴圈核心:
public void run() {
Graphics g = getGraphics();
while (gameRunning) {
tick(); // 邏輯更新:碰撞檢測、分數、結束判斷
input(); // 輸入處理:getKeyStates() 讀取按鍵
render(g); // 繪製:drawImage、drawRegion、fillRect 等
flushGraphics(); // 將離屏緩衝翻轉到螢幕
Thread.sleep(timeStep); // 控制幀率 (如 40ms = 25fps)
}
}
關鍵遊戲類別說明
| 類別 | 用途 |
Sprite | 動畫精靈:多幀圖像、位置、速度、碰撞矩形、參考像素、轉換 (旋轉/鏡像)。 |
TiledLayer | 磚塊地圖:大背景由小圖塊拼貼,支援捲動。 |
LayerManager | 管理多個 Layer (Sprite/TiledLayer) 的 Z-order 與統一繪製。 |
GameCanvas | 雙緩衝 Canvas,getKeyStates() 即時查詢按鍵狀態。 |
開發建議
- 善用
GameCanvas 雙緩衝與 flushGraphics() 避免閃爍。
- 遊戲迴圈分離邏輯、輸入、渲染,固定時間步長。
- 資源 (圖片、音效) 在
startApp() 載入,destroyApp() 釋放。
- 注意記憶體限制,複用物件,避免迴圈中頻繁
new。
- 測試多裝置螢幕尺寸、按鍵映射、效能表現。