手機編程鍵盤碼問題

手機編程鍵盤碼
林剛  {[email protected]} 轉載請註明作者出處

 

1.NokiaMotorola手機鍵盤碼的區別

NokiaMotorola的手機在按鍵碼上是不同的,我們可以通過一個小程序來獲取他們的鍵盤碼:

 

這樣,我們就可以得到兩個品牌的手機各自的鍵盤碼:

我們可以看到,主要區別在於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)
{
int action = getGameAction(keyCode);

switch (action)
{

case LEFT:
left();
leftPressed = true;
break;

case RIGHT:
right();
rightPressed = true;
break;

default:
break;

}
repaint();

}
當按鍵被釋放的時候,我們就把相關的標記位設置爲false
public void keyReleased(int keyCode)
{
int action = getGameAction(keyCode);

switch (action)
{
case LEFT:
leftPressed = false;
buttonPressed = "";
break;

case RIGHT:
rightPressed = false;
buttonPressed = "";
break;
default:
break;
}
repaint();

}

這樣我們在重新繪製屏幕的時候就可以根據標記位的狀態進行繪畫了:
if (leftPressed)
{
left();
}
if (rightPressed)
{
right();
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章