专注于Jsp开发,为Jsp开发提供原动力郑州网站建设 | 网站优化 | 郑州网络公司 | 洛阳网站建设 | 网站建设 | 北京网站建设
jsp空间
    栏目导航:
公司动态
网站公告
Java动态
新站发布
    最近更新:
Java 7 路线图更新:反...
2009年10个Java技术解...
Scala编程语言简介
GlassFish服务器的简单...
Servlet 3.0公开预览版...
Java与Linux 一对开源...
Java应向Python学习对...
Sun发布Java的64位浏览...
    点击排行:
业界新闻
企业网络营销-第一步企...
微软酝酿调整收购雅虎...
网络技术推动“以客户...
第二届互联网社区大会...
Web2.0网站短期不会上...
中国企业如何抓住机会...
提高企业内网安全的十...
J2ME三种低级用户界面事件处理技术比较
作者无:   加入时间:2008-11-15 17:41:57   点击次数:38

 在J2ME的低级用户界面编程中,进行事件处理是经常使用到的技术之一,因为处理手机键盘上的按键事件是最常使用到的一种,所以就以此为中心,介绍一下实际使用过程中三种处理方式进行说明:  1、 覆盖keyPressed方法  在继承了Canvas的界面中,如果需要进行按键的处理,我们只需要在该类中覆盖Canvas类里面的这个方法,当手机按键被按下时,系统会自动调用该方法,并把被按下的按键的键值(keyCode)作为参数传递进来。所以如果需要处理按键事件,只需要在该方法内部检测按下的按键的键值就可以了。  在手机键盘上,可以简单的分为功能键区域和数字键区域,功能键指手机上的左右软键,中间的导航键以及接听电话和挂机键等,数字键区域指手机键盘上的0-9数字键以及*号和#号键。其中功能键的个数以及键值,不同的手机区别很大,而数字键的区域的按键个数,以及按键的键值都是一样的。  检测键值有如下两种方法:  a) 直接使用keyCode值  直接使用keyCode值的代码有如下两种,分别是: if(keyCode == 52){  //处理代码  }  或者:  if(keyCode == Canvas.KEY_NUM4){  //处理代码  }         以上是使用按键处理中的两种代码书写风格,建议实际使用过程中使用第二种,这样代码容易阅读。 而在实际的游戏开发过程,除了一些特殊的功能键,例如手机上的左右软键,很少使用这种方式进行编写,而是采用下面的方式进行处理。  b) 使用gameAction(游戏动作)  gameAction是一种将手机键盘映射成为游戏动作的机制,通过这种机制,可以使不同手机上的按键都能转换为类似或者是相同的游戏动作,当然这个工作是由每个手机厂商实现的。  实际使用中的代码如下:  //将keyCode转换为游戏动作  int action = getGameAction(keyCode);  其中,keyCode和游戏动作的对应关系如下:  Canvas.UP——数字键2和向上导航键  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方法的限制,也就是说可以写在任意的处理方法内部,只需要在线程中调用即可。  使用该处理方式,无论线程中的延迟多么长,系统都可以保持该按键的状态。这个好处是其他处理方式无法做到的。  首先,获得游戏按键状态,代码如下:     //获得游戏的按键状态  int states = getKeyStates();  该代码的作用是获得当前按键状态,并把按键状态清空!具体的处理代码如下: //获得游戏的按键状态  int states = getKeyStates();         在MIDP2.0的Game API处理中,这个方式使手机游戏开发重新回归到传统的模式中,也使游戏的处理更加灵活。


上一篇: Java 7 路线图更新:反响强烈
下一篇: Jdk1.5增强的for循环
关于我们 | 代理申请 | 付款方式 | 客户管理 | 友情链接 | 网站导航
版权所有 2008 三易网络(洛阳)科技开发有限公司
服务热线:0379-63921200   63265368(洛阳) 0371-63653120(郑州)
QQ在线客服: 312236232  516731113   Email:web@suneasy.cn

总部地址:纱厂南路41号中泰新城泰华苑12楼B座 郑州分公司地址:金水区圣菲城