j2me的键控处理

学过j2me的都知道,在midp1.0中是重载keyPressed(),keyReleased()方向来响应及处理用户的按键,而自从在midp2.0有了GameCanvas之后,一般我们在开发手机游戏的时候都会选择继承GameCanvas类而不用Canvas类(除非开发所针对的手机不支持midp2.0),原因在于GameCanvas比Canvas多了缓冲画面的功能,这有效地避免了画而闪烁及断层等问题.而在GameCanvas中要进行键控处理一般都会先用下而语句:

int keyState = getKeyStates();

然后再通过将keyState与GameCanvas中定义的几个常量,如UP_PRESSED,DOWN_PRESSED,LEFT_PRESSED,RIGHT_PRESSED及FIRE_PRESSED(分别对应于向上,向下,向左,向右及Fire)进行'与'操作,若结果不为零,则为用户按了相应的按键,如:

if( (keyState & UP_PRESSED) != 0){
      //相应操作
}else if ((keyState & DOWN_PRESSED) != 0){
      //相应操作
}else if ((keyState & LEFT_PRESSED) != 0){
      //相应操作
}else if ((keyState & RIGHT_PRESSED) != 0){
      //相应操作
}else if ((keyState & FIRE_PRESSED) != 0){
      //相应操作
}

但此时要注意的是,在开发一个手机游戏的时候,有些时候我们的开发不仅仅只有一个界面,(有些时候会用低级界面及高级界面,如GameCanvas类与Form,TextBox等混合用,例如你可以用一个List控件来建一个菜单,而实际上游戏所有的界面都在继承自GameCanvas的画布中),此时可以通过MIDlet唯一的一个Display对象的setCurrent方法来设置当前要显示的界面(如List或者你自己的画面类),这里,需要特别注意的是,当你设置当前显示不是你自己的画布时,此时在你自己画布中定义的keyState=getKeyStates()返回的将会是-1,而-1与所有的UP_PRESSED,DOWN_PRESSED,LEFT_PRESSED,RIGHT_PRESSED及FIRE_PRESSED相与的结果都不为0,即在进行if判断按键时,一个条if语句总会执行,为了防止出现这样的结果,所以在处理按键时,应加上这句

int keyState = getKeyStates();
if(keyState == -1) {
       //相应操作
}
if( (keyState & UP_PRESSED) != 0){
      //相应操作
}else if ((keyState & DOWN_PRESSED) != 0){
      //相应操作
}else if ((keyState & LEFT_PRESSED) != 0){
      //相应操作
}else if ((keyState & RIGHT_PRESSED) != 0){
      //相应操作
}else if ((keyState & FIRE_PRESSED) != 0){
      //相应操作
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值