首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME 手機鍵盤處理完全指南:高階/低階 UI 差異、按鍵碼移植與 GameAction 統一策略

     編輯:J2ME

鍵盤輸入是 J2ME 互動核心。高階 UI 與低階 UI 處理機制截然不同,本文詳細對比兩者差異,並提供跨裝置按鍵碼移植的標準解法 getGameAction()。

高階 UI:Command 綁定,無需處理鍵值

  • Displayable.addCommand(Command) 自動對應裝置軟鍵
  • 雙軟鍵裝置:左鍵 Command.BACK/CANCEL,右鍵 Command.OK/SCREEN
  • 單軟鍵裝置:自動彈出選單
  • 完全跨平台,開發者不碰 keyCode

低階 UI:直接處理 keyCode,面臨移植地獄

區域按鍵典型 keyCode移植問題
功能鍵區左軟鍵Nokia:-6, Moto:-21, SE:-7各廠商完全不同,最大移植痛點
右軟鍵Nokia:-7, Moto:-22, SE:-6
方向上-1 / Canvas.UP
方向下-2 / Canvas.DOWN
確定/選擇-5 / Canvas.FIRE
數字鍵區0~9統一 '0'~'9' (48~57)完全相容,可直接使用
*統一 '*' (42)
#統一 '#' (35)

統一解法:getGameAction(keyCode) → GameAction

將裝置相關 keyCode 映射為標準遊戲動作常數:

GameAction 常數對應實體鍵
Canvas.UP數字鍵 2、方向鍵上
Canvas.DOWN數字鍵 8、方向鍵下
Canvas.LEFT數字鍵 4、方向鍵左
Canvas.RIGHT數字鍵 6、方向鍵右
Canvas.FIRE數字鍵 5、方向鍵確定
Canvas.GAME_A數字鍵 1 或 7
Canvas.GAME_B數字鍵 3 或 9
Canvas.GAME_C數字鍵 7 或 *
Canvas.GAME_D數字鍵 9 或 #

程式碼範例


protected void keyPressed(int keyCode) {
    int action = getGameAction(keyCode);
    switch (action) {
        case Canvas.UP:    player.moveUp();    break;
        case Canvas.DOWN:  player.moveDown();  break;
        case Canvas.LEFT:  player.moveLeft();  break;
        case Canvas.RIGHT: player.moveRight(); break;
        case Canvas.FIRE:  player.fire();      break;
        case Canvas.GAME_A: player.specialA(); break;
        // ...
    }
}

Nokia 專屬軟鍵處理(FullCanvas)


import com.nokia.mid.ui.FullCanvas;

protected void keyPressed(int keyCode) {
    if (keyCode == FullCanvas.SOFTKEY1) { /* 左軟鍵 */ }
    else if (keyCode == FullCanvas.SOFTKEY2) { /* 右軟鍵 */ }
    else { /* 通用 GameAction 處理 */ }
}
僅限 Nokia 系列,其他廠商無此 API。跨平台專案建議封裝 KeyHandler 介面,依平台注入實作。

實務建議

  • 遊戲邏輯完全使用 GameAction,禁止硬編碼 keyCode
  • 選單/設定等非遊戲畫面優先用高階 UI (List, Form) 避開鍵值問題
  • 真機測試建立 KeyMap.properties 記錄各機型對應表
  • 觸控螢幕裝置(後期機型)getGameAction 可能失效,需加入觸控事件處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved