J2ME 遊戲開發面臨嚴苛的資源限制,本文分享實戰經驗:IO 讀取優化、資源壓縮決策、跨機型移植策略、按鍵事件差異處理,助開發者避開常見陷阱。
初期使用 DataInputStream 包裝 InputStream 讀取地圖資料,耗時 1242ms。改用單純 InputStream 直接讀取 byte,降至 1065ms(省 ~200ms)。嘗試一次性讀入緩衝區反而變慢(1154ms),證實頻繁小量讀取在 KVM 上未必比大塊讀取慢。封裝讀取方法拆分 try 區塊雖減小 class 大小,但執行速度微增(1089ms),得不償失。結論:能用簡單流勿用複雜流,實測為準。
嘗試對地圖檔做行程長度編碼(RLE),檔案從 2.23KB 壓至 900 bytes,但打包後 JAR 卻變大(185 → 216 bytes)。原因:JAR 本身為 ZIP 壓縮格式,預先壓縮反而降低壓縮率。同理,PNG 經優化工具處理後在 JAR 中可能變大。建議:壓縮前先觀察檔案在 JAR 內實際大小,必要時才處理。
定義介面(如 StringTable)集中遊戲所有靜態字串,實作該介面的類別即可存取。移植時僅修改介面常數。座標定位採用 getWidth()、getHeight()、Font.stringWidth() 避免硬編碼,大幅降低移植工作量。
實測 Nokia 7210/3100 一次僅接受一個按鍵事件:按住 Up 不放再按 Left,精靈不會轉向;鬆開 Up 後才產生 Left 的 keyPressed。WTK 模擬器支援多鍵同時觸發,可斜向移動。開發時需針對目標機型設計輸入處理邏輯(如緩衝隊列、優先順序)。
依平台差異建議維護 6 個版本: