选择显示字体大小

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处理中,这个方式使手机游戏开发重新回归到传统的模式中,也使游戏的处理更加灵活。简单介绍了一下j2me中低级用户界面的按键处理方式,并进行了一些比较。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons