注册本站  论坛  繁體中文

慧民电脑芯片级维修-电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> J2EE >> J2ee核心 >> Java正文

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

文章来源:chinaitlab社区 作者:佚名 更新时间:2008-9-21 17:06:09 【 】 【加入收藏

   在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处理中,这个方式使手机游戏开发重新回归到传统的模式中,也使游戏的处理更加灵活。 

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     面向Java开发人员的Scala指南: 包和访问修饰…
     J2SE 路径问题综合分析
     深入Java调试体系: 第1部分,JPDA体系概览
     Apusic上用JavaMail发邮件
     Java开源协议小全
     java 实现压缩与解压缩ZIP
     利用Ruby简化你的Java测试
     开源Erlang真的能成为下一代Java语言吗
     Java SE 6 新特性: XML API与Web服务
     Java SE 6 新特性: 对脚本语言的支持
    最 新 推 荐
     评点Flex结合J2EE的开发与架构
     Java EE 进行开发已经变得困难
     J2ME三种低级用户界面事件处理技术比较
     对J2EE应用系统分层设计的思考
     Apusic Operamasks的资源注入
     关于J2EE中的乱码解决
     排序链树搜索算法在GIS POI关键字搜索中的应…
     Java异常处理:如何避免重复打印异常
     JLDAP 连接池的创建及测试程序
     Java Persistence API (JPA) 的陷阱
    相 关 文 章

    J2SE 路径问题综合分析
    Java SE 6 新特性: Instrumentation 新功能
    J2ME Property属性表
    J2ME:手机归属地查询软件
    J2ME编程--实现手机屏幕的切换
    评点Flex结合J2EE的开发与架构
    Spring Framework 的理解
    Spring Framework的理解以及可维护性的思考
    J2EE综合:Struts上传多个文件的例子
    J2ME(JSR75)组件之文件选择器

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    门市地址:广东省佛山市南海区黄岐黄海路133号
    本网站所有内容未经许可不得转载或做其他使用