J2ME三种低级用户界面事件处理技术比较

比较

    在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();
  该代码的作用是获得当前按键状态,并把按键状态清空!具体的处理代码如下:

//处理按键状态:
if((states & GameCanvas.LEFT_PRESSED) != 0){ //向左
}
if((states & GameCanvas. RIGHT_PRESSED) != 0){ //向右
}
  在MIDP2.0的Game API处理中,这个方式使手机游戏开发重新回归到传统的模式中,也使游戏的处理更加灵活。

时间: 2024-09-22 09:41:36

J2ME三种低级用户界面事件处理技术比较的相关文章

三种Web开发主流技术的性价评价_服务器

  ASP:MS IIS 4/Visuale Interdev 6   PHP:Apache 1.2.x/HomeSite 4.5/PHP 4   Java:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2   以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对自己应用系统进行选择的同仁谈谈自己对它们的评价,以做参考,同时也请大家提出自己的想法和意见 ,多交流.但是我有一个这样的看法:"一个产品它存在就有存在的理由,它不

对比三种模块化数据中心技术

现如今数据中心单从规模上来讲,一方面向着超大规格的方向迅猛发展,数据中心的规模越来越大,包含数十万台服务器的超级数据中心都纷纷出现;另一方面却向着相反的方向发展,规模越来越小,当然这里所说的规模越来越小并不是以牺牲性能为代价的,具有相同性能的数据中心规模越来越小,集成化程度越来越高,也就是常说的模块化数据中心.模块化的优点是可以非常迅速地部署完毕,通常只需要几周时间,相比之下,建造传统数据中心通常需要几个月,甚至几年.模块化数据中心成本较低,节省空间,同时也较易搬动.模块化数据中心也有三大类具体

三种Web开发主流技术的评价之ASP

web|评价|主流 三种主流技术是哪三种呢?我主要讲一下ASP(ActiveX Server Page).PHP.Java这三种技术.主要是基于我到现在已经使用的以下产品而谈: ASP:MS IIS 4/Visuale Interdev 6 PHP:Apache 1.2.x/HomeSite 4.5/PHP 4 Java:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2 以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对

三种Web开发主流技术的评价之ASP(转载)

web|评价|主流 三种主流技术是哪三种呢?我主要讲一下ASP(ActiveX Server Page).PHP.Java这三种技术.主要是基于我到现在已经使用的以下产品而谈: ASP:MS IIS 4/Visuale Interdev 6 PHP:Apache 1.2.x/HomeSite 4.5/PHP 4 Java:iPlanet Web Server 4.1/JBuilder 3.5/JDK 1.2.2 以上技术本人却实使用过,而且已经使用它们做过项目,基于以前的工作经验给初学者和正在对

三种Web开发主流技术的评价之JSP(转载)

js|web|评价|主流 JSP:Java Server Page JSP又是什么原因出现的呢?Java在推向开发人员时出现了重重困难,首先是Java缺少主流系统的广泛支持,而在所有的平台和技术上都缺少可以直接参照的应用方式.这时java就走向了在各个应用层上的积极进取,在自己擅长的与不擅长的领域都走出了坚定的脚步.其中最让Web技术人员兴奋的就是Java Servlet的出现和JSP的渐渐成熟,这一步步都让Java正式的走向了Web开发技术的舞台.Java利用了它的跨平台技术,使java的应用

三种Web开发主流技术的评价之JSP

js|web|评价|主流|js JSP:Java Server Page JSP又是什么原因出现的呢?Java在推向开发人员时出现了重重困难,首先是Java缺少主流系统的广泛支持,而在所有的平台和技术上都缺少可以直接参照的应用方式.这时java就走向了在各个应用层上的积极进取,在自己擅长的与不擅长的领域都走出了坚定的脚步.其中最让Web技术人员兴奋的就是Java Servlet的出现和JSP的渐渐成熟,这一步步都让Java正式的走向了Web开发技术的舞台.Java利用了它的跨平台技术,使java

三种Web开发主流技术的评价之PHP

web|评价|主流 作者:黄冬 PHP:Personal HomePage PHP是一个什么原因出现的呢?它是一个技术人员希望能用一个快速的方面来完成他自己的个人主页中的一个小应用.而在他一发不可收时出现了php,它使一个人能在多种操作系统下迅速的完成一个轻型的Web应用.所以在短短的几年里,php迅速的升级了它的版本,同时在GNU的世界里找到了一个青梅竹马的伙伴----Apache.这终于让php有了基础,能在一个最佳的环境中运行,同时由于两个产品都是公开源代码的产品,所以大家可以使用它们的源

三种Web开发主流技术的评价之PHP(转载)

web|评价|主流 PHP:Personal HomePage PHP是一个什么原因出现的呢?它是一个技术人员希望能用一个快速的方面来完成他自己的个人主页中的一个小应用.而在他一发不可收时出现了php,它使一个人能在多种操作系统下迅速的完成一个轻型的Web应用.所以在短短的几年里,php迅速的升级了它的版本,同时在GNU的世界里找到了一个青梅竹马的伙伴----Apache.这终于让php有了基础,能在一个最佳的环境中运行,同时由于两个产品都是公开源代码的产品,所以大家可以使用它们的源代码将这两个

Android三种GSM手机定位技术分析_Android

复制代码 代码如下: // 声明LocationManager对象 LocationManager loctionManager; // 通过系统服务,取得LocationManager对象 loctionManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 方式一: 复制代码 代码如下: // 通过GPS位置提供器获得位置 String providerGPS = LocationManager.GPS_