作者分享開發 Moto T720 彩色遊戲《寶石方塊》的五大關鍵技巧,涵蓋繪圖優化、除錯方法、工具類封裝、多解析度適配與記憶體管理,並附完整程式碼片段。
在 Canvas 建構子建立離屏 Image 與 Graphics,繪圖操作全導向離屏 Graphics,paint() 僅將離屏圖一次繪至螢幕:
Image buf = Image.createImage(width, height);
Graphics bg = buf.getGraphics();
// 繪圖時使用 bg.drawImage(...)
public void paint(Graphics g) {
g.drawImage(buf, 0, 0, Graphics.TOP | Graphics.LEFT);
}
流程:定義緩衝 → 離屏繪圖 → repaint() 觸發 paint() → 螢幕顯示完整幀。
J2ME 模擬器下 IDE 斷點易導致死機。改用 stopFlag + while(stopFlag){} 實現程式暫停,於螢幕直接顯示變數值:
private void testFun(String str) {
stopFlag = true;
bg.setGrayScale(255); bg.fillRect(0,0,fontW,fontH);
bg.setGrayScale(0); bg.drawString(str,0,0,Graphics.TOP|Graphics.LEFT);
repaint();
while(stopFlag){}
}
public void keyPressed(int keyCode) { stopFlag = false; }
同樣邏輯稍加修改即可實現遊戲暫停/繼續功能,優於 sleep() 可無限期暫停。
J2ME 缺乏 Set,以單向鏈表實作 kSet / kSetNode,提供 add、contains、getFirst、clear、isEmpty,用於記錄待消除方塊座標,保證無重複。
針對目標機型 (120x142) 計算偏移量 addX = (width-120)/2、addY = (height-142)/2,所有繪圖座標加上偏移量,使遊戲畫面在大螢幕手機上置中顯示。注意 getHeight() 已扣除 Command 標籤高度。
Form/Canvas,需要時才 new。null,適時呼叫 System.gc()。建議:先完成核心玩法確保無記憶體洩漏,再逐步加入封面、選單等功能。
levelSleep = 600 - (level-1)*50; // 最低 200ms
levelDelTask = 200 + (level-1)*100; // 上限 1000
這些技巧源自實際專案磨練,能有效解決 J2ME 開發中常見的效能、除錯、相容性與記憶體難題,助力開發出流暢、耐玩的手機遊戲。