midp移植到doja过程中的按键映射方法

原创 2006年05月22日 18:13:00

写文章对我来说真是件痛苦的事,从小学到高中,语文成绩能够及格一直都是个奢侈的梦想, 没办法,还是忍不住要写出来,权当补补语文吧!下面就讲讲我在移植Midp游戏到Doja过程中是如何进行按键映射的,希望对大家有帮助。
    不论是midp手机还是doja手机,键盘上的按键都是差不多的,基于这个实事,我们只需要把doja中的键值修改为相应的midp键值即可。
    Midp中跟按键相关的常用函数包括:keyPressed(),keyReleased(),getGameAction(),一般很少用keyRepeated(), getKeyCode() ,getKeyName() 和触摸笔函数,在这里就不讨论了。而Doja中的函数只讨论processEvent(), 移植过程中很少涉及getKeypadState()函数,也不讨论。所以我们要做的就是如何把processEvent()函数还原成midp中的函数,具体做法如下:
 

Step 1、反编译midp中的Canvas.class,拷贝其键值常量:
   为什么我们要拷贝这些常量呢?因为在实际情况中,我们拿到的midp代码千奇百怪,很多代码直接在逻辑中使用数字来判断按键情况,这让代码阅读起来很不放便,就跟别说修改了,虽然最终都能根据代码推导出来,但却白白的浪费了时间,也就直截了当的浪费了生命。下面是常用的键值:
    public static final int UP = 1;
    public static final int DOWN = 6;
    public static final int LEFT = 2;
    public static final int RIGHT = 5;
    public static final int FIRE = 8;
    public static final int GAME_A = 9;
    public static final int GAME_B = 10;
    public static final int GAME_C = 11;
    public static final int GAME_D = 12;
    public static final int KEY_NUM0 = 48;
    public static final int KEY_NUM1 = 49;
    public static final int KEY_NUM2 = 50;
    public static final int KEY_NUM3 = 51;
    public static final int KEY_NUM4 = 52;
    public static final int KEY_NUM5 = 53;
    public static final int KEY_NUM6 = 54;
    public static final int KEY_NUM7 = 55;
    public static final int KEY_NUM8 = 56;
    public static final int KEY_NUM9 = 57;
    public static final int KEY_STAR = 42;
    public static final int KEY_POUND = 35;
  另外:
  左右键要根据具体的机型来确定,这里以Nokia为例:
  public static final int KEY_SOFTKEY1 = -6;
  public static final int KEY_SOFTKEY2 = -7;
  
 Step 1、实现getGameAction()函数:
    Midp游戏中会经常使用这个函数,所以我们在doja代码中实现它。
    public static int getGameAction(int keyCode) {
       switch (keyCode) {
          case KEY_NUM2:
            keyCode = UP;
            break;
          case KEY_NUM4:
            keyCode = LEFT;
            break;
          case KEY_NUM6:
            keyCode = RIGHT;
            break;
          case KEY_NUM8:
            keyCode = DOWN;
            break;
          case KEY_NUM5:
            keyCode = FIRE;
            break;
        }
        return keyCode;
      }
 Step 3、建立键值映射表:
   这里没有全部映射,需要根据实际情况增加或减少映射内容,Doja Jar size被   限制在30k以内了,该省的就省吧,小日本就是扣。
   public static final int DOJA2MIDP_KEYS[][] = {
        {
        Display.KEY_2, KEY_NUM2}
        , {
        Display.KEY_4, KEY_NUM4}
        , {
        Display.KEY_6, KEY_NUM6}
        , {
        Display.KEY_8, KEY_NUM8}
        , {
        Display.KEY_UP, UP}
        , {
        Display.KEY_LEFT, LEFT}
        , {
        Display.KEY_RIGHT, RIGHT}
        , {
        Display.KEY_DOWN, DOWN}
        , {
        Display.KEY_5, KEY_NUM5}
        , {
        Display.KEY_SELECT, FIRE}
        , {
        Display.KEY_SOFT1, KEY_SOFTKEY1}
        , {
        Display.KEY_SOFT2, KEY_SOFTKEY2}

    };
 Step 4、实现按键映射:
  原理很简单,我们只要在processEvent()中转换键值并分配给keyPressed(),    keyReleased()即可。

  代码如下:
  public void processEvent(int type, int c) {
      //映射键值
   int tempKey = 0;
      for (int i = 0; i < DOJA2MIDP_KEYS.length; i++) {
        if (c == DOJA2MIDP_KEYS[i][0]) {
          tempKey = DOJA2MIDP_KEYS[i][1];
          break;
        }
      }
      c = tempKey;

   //分配按键
   if (type == Display.KEY_PRESSED_EVENT ) {
          keyPressed(c);
      }else {
    keyReleased(c);
   }
  }

 总结:这样我们就可以在不修改原来任何函数的条件下把midp代码中关于按键部分移植到doja中去。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

开发键盘过滤驱动实现模拟按键过程中遇到的问题

如何动态御载键盘过滤驱动      最近写个键盘过滤驱动,遇到的问题是动态御载后再有按键操作就会蓝屏,看了些资料终于明白了原因,写出来供大家参考,免得后来的朋友再重复这个郁闷的过程。   ...

PJSIP 检测通话过程中对方手机发送过来的in-bnad DTMF(no rfc2833)按键信息

最近做项目有用到在PJSIP客户端接收手机通过过程中发送过来的DTMF按键信息,刚开始查了一点资料发现pjsip有相应的方法,在pjsua_config  cfg; 这个结构体的通过设置此回调函数cf...

Android平台开发-Android keypad map-Android按键识别及映射过程

一、Android底层按键事件处理过程    在系统启动后,在文件。。。中,android 会通过    static const char *device_path = "/dev/input"; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)