控件(菜單、文本框、進度條等)尺寸隨螢幕變量動態計算。繪製方式決定適配難度:
所有控件用單一類實現,參數化區分類型,減少類數量。
遊戲常用圖片翻轉、像素繪製、全屏等,依賴廠商 API 或 MIDP 2.0。封裝統一接口,不同平台提供不同實現:
// Nokia 實現
public static Image createSubImg(Image img, int[] rect) {
Image sub = DirectUtils.createImage(rect[2], rect[3], 0);
sub.getGraphics().drawImage(img, -rect[0], -rect[1], 20);
return sub;
}
// MIDP 2.0 實現
public static Image createSubImg(Image img, int[] rect) {
return Image.createImage(img, rect[0], rect[1], rect[2], rect[3], 0);
}
業務代碼調用統一接口,移植時只需替換實現類。代價:間接調用略微降低性能,可接受。
MIDP 提供 GameAction 但不夠用。自定義虛擬鍵碼(位掩碼,每位代表一鍵,int 32 位足夠):
keyPressed 置位,keyReleased 清位。mapKeyCode(int keyCode) 將設備鍵值轉為虛擬鍵位。為三類核心差異封裝庫:
每機型重寫這三類,大部分代碼復用。輔以所見即所得動畫編輯工具管理圖形資源。從 Motorola V600 移植到 Nokia N-Gage 僅需 1 分鐘。
移植本質是「拆合」:將差異獨立出來便於修改。但各機型 Bug 仍需特殊處理,開發初期必須考慮移植架構。