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

写文章对我来说真是件痛苦的事,从小学到高中,语文成绩能够及格一直都是个奢侈的梦想, 没办法,还是忍不住要写出来,权当补补语文吧!下面就讲讲我在移植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中去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值