程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 使用J2ME技術開發RPG游戲(二)——按鍵處理機制

使用J2ME技術開發RPG游戲(二)——按鍵處理機制

編輯:J2ME
在游戲中,按鍵處理機制也需要小心的實現,這裡就介紹一種實用的按鍵處理機制。

       在實際的游戲中,一般為了按鍵靈敏,我們一般不會直接在keyPressed或keyReleased方法內部書寫邏輯的代碼,而只是在這些方法內部記錄或清除按鍵的記錄,而把實際的處理放在線程中進行。這個是本機制中采用的方式。

       而且不同手機的按鍵鍵值存在不同,為了方便移植,我們把按鍵轉換成自己定義的數值,然後在程序中使用自定義的值進行處理。

       該機制中最核心的變量為;

                  private int keyStates;

       用該變量中的一個二進制位來代表一種按鍵是否按下,如果按下為1,否則為0。每個按鍵自己進行了定義,定義的代碼如下:

                  /**向上*/

    private final int KEY_UP = 1;

    /**向下*/

    private final int KEY_DOWN = 1 << 1;

    /**向右*/

    private final int KEY_RIGHT = 1 << 2;

    /**向左*/

    private final int KEY_LEFT = 1 << 3;

    /**5鍵*/

    private final int KEY_FIRE = 1 << 4;

    /**左軟鍵*/

    private final int KEY_LEFT_SOFT = 1 << 5;

    /**右軟鍵*/

    private final int UP = 1 << 6;

    /**特殊用途按鍵,例如0鍵*/

    private final int KEY_ZERO = 1 << 7;

       轉換按鍵鍵值的方法根據手機型號不同,也存在很多的不同,下面是WTK模擬器的實現代碼:

                  /**

     * 將物理鍵值轉換為自定義鍵值

     * 說明:該方法和機型相關,下面是WTK的實現

     * @param keyCode 物理鍵值

     * @return 自定義鍵值

     */

    private int convertKey(int keyCode) {

        switch (keyCode) {

        case -6:

            return KEY_LEFT_SOFT;

        case -7:

            return KEY_RIGHT_SOFT;

        case Canvas.KEY_NUM2:

        case -1:

            return KEY_UP;

        case Canvas.KEY_NUM4:

        case -3:

            return KEY_LEFT;

        case Canvas.KEY_NUM6:

        case -4:

            return KEY_RIGHT;

        case Canvas.KEY_NUM8:

        case -2:

            return KEY_DOWN;

        case Canvas.KEY_NUM0:

            return KEY_ZERO;

        }

                      return 0;

                  }

       按鍵按下時,首先把物理按鍵的鍵值轉換為自定義的鍵值,然後把按鍵信息保存到按鍵狀態變量keyStates中,保存時采用的是位運算符位或實現的。實現代碼如下:

           public void keyPressed(int keyCode) {

               //轉換按鍵

               int key = convertKey(keyCode);

               //保存按鍵

               keyStates |= key;

           }

   按鍵釋放時,和按鍵按下類似,首先轉換鍵值,然後清除按鍵信息。清除時把按鍵狀態取反,然後與keyStates位與即可。實現代碼如下:

              public void keyReleased(int keyCode) {

               //轉換按鍵

               int key = convertKey(keyCode);

               //清除按鍵

               keyStates &= ~key;

           }

       在界面切換時,需要把按鍵狀態清空,這樣只需要把keyStates清零即可。實現代碼如下:

                  /**

                  * 清除按鍵

                  */

                  private void clearKey(){

                      keyStates = 0;

                  }

       實際的按鍵處理的代碼可以在線程中實現。

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