遊戲引擎是軟體架構核心支撐,統籌遊戲控制、角色、場景、道具、音效、事件監聽等元素。J2ME 遊戲架構通常建立兩大核心類別:MIDlet 控制生命週期,GameCanvas 實現主迴圈與渲染。
public class GameTest extends MIDlet implements CommandListener {
private Command exitCommand;
private GameCanvasTest gameCanvas;
public GameTest() {
exitCommand = new Command("Exit", Command.EXIT, 1);
gameCanvas = new GameCanvasTest(this);
gameCanvas.addCommand(exitCommand);
gameCanvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(gameCanvas);
}
protected void startApp() { /* gameCanvas.thread.start(); */ }
protected void pauseApp() { try { gameCanvas.thread.wait(); } catch(Exception e){} }
protected void destroyApp(boolean unconditional) { gameCanvas = null; }
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) notifyDestroyed();
}
public void changeScene(int sceneIndex) { /* 切換顯示邏輯 */ }
}
僅負責生命週期(start/pause/destroy)、命令處理、場景切換調度。
public class GameCanvasTest extends GameCanvas implements Runnable {
public GameCanvasTest(MIDlet midlet) {
super(true); // 抑制按鍵事件,改用 getKeyStates()
// 初始化精靈、背景、LayerManager 等
}
public void run() {
while (running) {
handleInput(getKeyStates());
updateSprites(); // 座標變化、碰撞偵測
render(); // 重繪畫面
flushGraphics(); // 雙緩衝刷新
Thread.sleep(frameDelay);
}
}
protected void handleInput(int keyStates) { /* 按鍵處理 */ }
protected void updateSprites() { /* 精靈/地圖邏輯 */ }
protected void render() { /* 根據座標繪製 */ }
}
實現 Runnable,run() 為遊戲主迴圈,涵蓋輸入、邏輯更新、渲染三階段。LayerManager 管理精靈圖層與背景。
隨著複雜度提升,雙類別架構易導致職責混淆。建議引入 MVC:
GameCanvas 專注渲染,依 Model 繪製。分層後各模組單一職責、低耦合,便於單元測試、多平台移植與功能擴展(如換膚、關卡編輯器、AI 模組化)。
掌握基礎雙類別架構是入門鑰匙;MVC 重構則是走向專業級手機遊戲開發的必經之路。