j2me的鍵控處理

學過j2me的都知道,在midp1.0中是重載keyPressed(),keyReleased()方向來響應及處理用戶的按鍵,而自從在midp2.0有了GameCanvas之後,一般我們在開發手機遊戲的時候都會選擇繼承GameCanvas類而不用Canvas類(除非開發所針對的手機不支持midp2.0),原因在於GameCanvas比Canvas多了緩衝畫面的功能,這有效地避免了畫而閃爍及斷層等問題.而在GameCanvas中要進行鍵控處理一般都會先用下而語句:

int keyState = getKeyStates();

然後再通過將keyState與GameCanvas中定義的幾個常量,如UP_PRESSED,DOWN_PRESSED,LEFT_PRESSED,RIGHT_PRESSED及FIRE_PRESSED(分別對應於向上,向下,向左,向右及Fire)進行'與'操作,若結果不爲零,則爲用戶按了相應的按鍵,如:

if( (keyState & UP_PRESSED) != 0){
      //相應操作
}else if ((keyState & DOWN_PRESSED) != 0){
      //相應操作
}else if ((keyState & LEFT_PRESSED) != 0){
      //相應操作
}else if ((keyState & RIGHT_PRESSED) != 0){
      //相應操作
}else if ((keyState & FIRE_PRESSED) != 0){
      //相應操作
}

但此時要注意的是,在開發一個手機遊戲的時候,有些時候我們的開發不僅僅只有一個界面,(有些時候會用低級界面及高級界面,如GameCanvas類與Form,TextBox等混合用,例如你可以用一個List控件來建一個菜單,而實際上游戲所有的界面都在繼承自GameCanvas的畫布中),此時可以通過MIDlet唯一的一個Display對象的setCurrent方法來設置當前要顯示的界面(如List或者你自己的畫面類),這裏,需要特別注意的是,當你設置當前顯示不是你自己的畫布時,此時在你自己畫布中定義的keyState=getKeyStates()返回的將會是-1,而-1與所有的UP_PRESSED,DOWN_PRESSED,LEFT_PRESSED,RIGHT_PRESSED及FIRE_PRESSED相與的結果都不爲0,即在進行if判斷按鍵時,一個條if語句總會執行,爲了防止出現這樣的結果,所以在處理按鍵時,應加上這句

int keyState = getKeyStates();
if(keyState == -1) {
       //相應操作
}
if( (keyState & UP_PRESSED) != 0){
      //相應操作
}else if ((keyState & DOWN_PRESSED) != 0){
      //相應操作
}else if ((keyState & LEFT_PRESSED) != 0){
      //相應操作
}else if ((keyState & RIGHT_PRESSED) != 0){
      //相應操作
}else if ((keyState & FIRE_PRESSED) != 0){
      //相應操作
}

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章