手機編程鍵盤碼
林剛 {[email protected]} 轉載請註明作者出處
1.Nokia和Motorola手機鍵盤碼的區別
Nokia和Motorola的手機在按鍵碼上是不同的,我們可以通過一個小程序來獲取他們的鍵盤碼:
這樣,我們就可以得到兩個品牌的手機各自的鍵盤碼:
我們可以看到,主要區別在於Game鍵。我們把
key=keyCode; 換成
key=getGameAction(keyCode);以後。
鍵盤碼便一致了,但是對於方向鍵上面的部分鍵還是無法判斷,因爲他們的返回值是0。因此在程序中往往需要結合兩種判碼方式。
2.連續按鍵的問題{轉載自:http://www.java-cn.com/technology/tech/3433.html}
在MIDP中的低級事件處理是通過keyPressed()、keyReleased()和keyRepeated()來處理的,用getGameAction 可以得到Canvas定義的常量鍵名,MIDP 中定義瞭如下的按鍵值分別是: KEY_NUM0, KEY_NUM1, KEY_NUM2, KEY_NUM3, KEY_NUM4, KEY_NUM5, KEY_NUM6, KEY_NUM7, KEY_NUM8, KEY_NUM9, KEY_STAR 和 KEY_POUND。
在遊戲開發中爲了保證程序的可移植性,通常我們都會把鍵值轉換爲遊戲動作,在MIDP中定義瞭如下的遊戲動作: UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C,GAME_D。轉換非常簡單,可以通過Canvas提供的方法getGameAction()。
一般來說處理keyPressed()和keyReleased()都比較容易,但是處理按鍵一直被按下的情況稍微複雜一些。因爲我們使用的設備並不一定 支持連續按鍵的事件。你可以通過方法hasRepeatEvents()來檢測平臺是否支持當按鍵持續按下的時候產生重複事件。如果支持那麼你可以在 keyRepeated()的方法中處理相關邏輯,如果不支持那麼你必須採取其他的方法。
這裏筆者介紹一種通過設置標誌位的方式來處理連續按鍵的方法。其實原理非常的簡單,我們通過設置標誌位判斷按鍵是否被按下了,比如我們判斷LEFT是不是被按下了。當LEFT被按下的時候,我們把成員變量leftPressed設置爲true,代碼如下:
public void keyPressed(int keyCode) |