初次開發 J2ME 遊戲時若未考慮移植,後期適配將極其痛苦。預先規劃可將移植成本降至最低。本文總結四大核心差異點與應對策略。
控件(選單、文字框、進度條等)尺寸必須以螢幕寬高為變數動態計算。繪製方式上,採用圖片平鋪 + 畫線混合模式:放大時增加平鋪次數,縮小時減少,單一套素材即可覆蓋多種解析度。所有控件統一由一個參數化類別實作,極少新增類別,降低維護複雜度。
若僅用 MIDP 1.0 移植無憂,但實際常需圖片翻轉、像素操作、全螢幕模式等廠商擴展或 MIDP 2.0 API。解法:為每個差異 API 建立統一介面。例如建立透明子圖功能 createSubImg(Image, int[] rect):
DirectUtils.createImage(w, h, 0); g.drawImage(img, -x, -y, 20);Image.createImage(img, x, y, w, h, 0);上層邏輯只呼叫 createSubImg,移植時僅替換實作類,犧牲極微間接呼叫開銷換取極大維護彈性。
雖 MIDP 提供 getGameAction(),但遊戲常需更多自訂動作。採用 32-bit 位元遮罩 記錄鍵盤狀態(每 bit 對應一虛擬鍵),keyPressed 置 1、keyReleased 清 0。核心是鍵碼映射函數:將裝置原生 keyCode 轉為內部虛擬鍵值(2 的冪次)。每款手機只需改寫此映射函數,上層邏輯完全不動。進階可在此基礎上自訂 Game Action,支援玩家自訂按鍵配置。
將所有平台差異集中在三個核心類別:
針對新機型僅需重寫這三個類(大部分程式碼可複用),配合所見即所得的動畫編輯工具,可在1 分鐘內完成從 Motorola V600 到 Nokia N-Gage 的移植。剩餘挑戰多為各機型特有 Bug,需個案處理。
核心思想是「拆合」:將差異性剝離、封裝、介面化。移植雖仍繁瑣,但架構良好可將不可控風險降至最低。寫代碼前請三思移植之路!