程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> getKeyCode(int gameAction) 與getGameAction(int keyCode)的區別

getKeyCode(int gameAction) 與getGameAction(int keyCode)的區別

編輯:J2ME

一個MIDlet應用程序通過調用Canvas方法來探測哪些鍵盤代碼映射到運行的應用程序中的抽象游戲動作:

public static int getGameAction(int keyCode); 

  Canvas類定義抽象游戲動作集:UP、DOWN、LEFT、RIGHT、FIRE等等。

  游戲開發者應該知道MIDP 1.0規范中的一個問題。這個類定義了轉化鍵盤代碼到游戲動作的方法,同樣也定義了轉化游戲動作到鍵盤代碼的方法。

public int getGameAction(int keyCode)
public int getKeyCode(int gameAction)

  方法getKeyCode(int gameAction)可能會導致一些問題,因為它只能返回基於游戲動作的一個鍵盤代碼,即使MIDP 1.0允許超過一個鍵盤代碼被實現。在Nokia手機中,個別的一些鍵盤代碼被映射到相同的游戲動作,比如"UP鍵"和"2鍵"都被映射為向上的游戲動作。而這個方法只能返回其中之一;返回的值是特定的實現。然而,如果方法getGameAction(int KeyCode)使用"UP鍵"和"2鍵"的鍵盤代碼作為參數,這個方法將返回正確的向上的游戲動作。下面來看一個不好的例子,以加深我們的印象:

//不好的例子,不要這麼做:
class TetrisCanvas extends Canvas {
    int leftKey, rightKey, downKey, rotateKey;
    void init (){
        //FOLLOWING MUST NOT BE DONE
        leftKey = getKeyCode(LEFT);
        rightKey = getKeyCode(RIGHT);
        downKey = getKeyCode(DOWN);
        rotateKey = getKeyCode(FIRE);
    }


    public void keyPressed(int keyCode) {
        if (keyCode == leftKey) {
            moveBlockLeft();
        } else if (keyCode = rightKey) {
...
        }
    }
}
 

  下面是更好的解決方案:

class TetrisCanvas extends Canvas {
    void init (){
    }
    public void keyPressed(int keyCode) {
        int action = getGameAction(keyCode);
        switch (action){
            case Canvas.LEFT:
                moveBlockLeft();
                break;
            case Canvas.RIGHT:
                moveBlockRight();
                break;
        }
}
}
 


  這個例子是MIDP 1.0規范中的例子,使用getKeyCode ( int gameAction)處理鍵盤代碼值,只能返回一個值。如果這樣的話,其它可能的按鍵映射就不能在MIDlet中使用了。比如說,在Nokia 7650中就會出現問題,Nokia 7650有五個方向鍵和一個操縱桿以及普通的鍵盤布局,上面這個例子就會返回操縱桿的值而不是鍵盤的值。這是處理事件的一種與設備無關的方法,也是一種不好的方法。更好的解決方法是在keyPressed ()方法內使用getGameAction ( int KeyCode)。通常,應用程序應該避免使用getKeyCode ( int gameAction)方法並且總是使用getGameAction ( int KeyCode)。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved