使用J2ME技术开发RPG游戏(二)——按键处理机制

来源:互联网 发布:win7网络连接红叉 编辑:程序博客网 时间:2024/05/21 05:38

使用J2ME技术开发RPG游戏()——按键处理机制

作者:陈跃峰

出自:http://blog.csdn.net/mailbomb

 

       在游戏中,按键处理机制也需要小心的实现,这里就介绍一种实用的按键处理机制。

       在实际的游戏中,一般为了按键灵敏,我们一般不会直接在keyPressedkeyReleased方法内部书写逻辑的代码,而只是在这些方法内部记录或清除按键的记录,而把实际的处理放在线程中进行。这个是本机制中采用的方式。

       而且不同手机的按键键值存在不同,为了方便移植,我们把按键转换成自己定义的数值,然后在程序中使用自定义的值进行处理。

       该机制中最核心的变量为;

                  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;

                  }

       实际的按键处理的代码可以在线程中实现。

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1492291


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 1月婴儿排便困难怎么办 吃完辣的痔疮肿了怎么办 肛裂怎么办兰州来医博.相信 胎儿脐带绕颈一周怎么办 郑大一附院怎么办合作医疗 痔疮包不消怎么办很疼 痔疮内扎手术后直肠窄小怎么办 2个月大的宝宝鼻塞怎么办 宝宝鼻屎比较深怎么办 来例假痔疮犯了怎么办 微医爽约过一次怎么办 炸完的薯条软了怎么办 学信网号码换了怎么办 学信网注册换手机了怎么办 学信网手机号码已被注册怎么办 学信网手机号码被注册了怎么办 去英国留学不会做饭怎么办 小米陶瓷刀钝了怎么办 橱柜的缝擦不到怎么办 悠悠球上油早了怎么办 买了没有esp的车怎么办 饥荒海难狗来了怎么办 饥荒海难拖网掉水里了怎么办 饥荒遇到了猪人怎么办 饥荒龙蝇赖在家不走怎么办 饥荒海难崩档了怎么办 gta5全是rpf文件怎么办 饥荒没有海象人营地怎么办 饥荒海滩猎犬来了怎么办 宝宝换牙门牙上长颗尖牙怎么办 肉卡在牙缝里怎么办 电脑做系统卡死怎么办 苹果6升级太卡怎么办 电脑玩不了联机饥荒怎么办 饥荒渡渡鸟死了一只怎么办 饥荒电脑联机植物生病怎么办 开车蹭到别人车怎么办 立定跳不会收腹怎么办 1岁宝宝有蛔虫怎么办 手机屏幕总是有网页跳出来怎么办 cs游戏屏幕变成正方形怎么办