background image

 
Canvas.DOWN——数字键 8 和向下导航键
  Canvas.LEFT——数字键 4 和向左导航键
  Canvas.RIGHT——数字键 6 和向右导航键
  Canvas.FIRE——数字键 5 和确定导航键
  Game_A、Game_B、Game_C、Game_D 分别对应键盘上的 1、3、7、9 或者是 7、9、*、#键。
  转换成游戏动作以后的事件处理代码如下:
  switch(action){
  case Canvas.LEFT://向左
  //处理代码

  break;
  case Canvas RIGHT://向右

  break;
  case Canvas.UP://向上

  break;

……

  
  }

  这个就是 MIDP1.0 中最常使用的按键处理方式。但是无论这种方式如何的优越,它还
是无法摆脱 keyPressed 方法的束缚。
  这样就将游戏编程中的三种逻辑:延迟、响应用户操作、重新绘制,隔离了开来,分
别在用户线程和系统线程中进行。
  为了解决这个不足,MIDP2.0 在 GameCanvas 内部引入了一种新的事件处理方式按键
状态(keyStates)机制。
  2  

、 使用 keyStates

  按键状态指系统通过一个变量来记录手机键盘上每个和游戏动作有关的按键,如果
该键按下则设置对应的位(bit)为 1,否则为 0,然后可以通过位运算获得哪个按键被按下。
  注意:按键状态只能在 MIDP2.0 的 GameCanvas 子类中里面使用,而且只能处理和
游戏相关的按键。如果支持该处理方式处理游戏按键的话,将在 keyPressed 方法中无法接
收到和游戏相关的按键,其他按键还可以正常接收响应。
  如果要使用该功能,首先要在 GameCanvas 子类的构造方法中,让该界面支持该操作,
这个步骤可以使用 GameCanvas 的构造方法来实现,代码如下:
  //使该界面支持按键状态处理

  super(true);

  这样该界面就可以进行按键状态处理。和前面的按键处理不同,该种处理方式可以脱
离 keyPressed 方法的限制,也就是说可以写在任意的处理方法内部,只需要在线程中调
用即可。
  使用该处理方式,无论线程中的延迟多么长,系统都可以保持该按键的状态。这个好