你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
使用J2ME技术开发RPG游戏之按键处理机制
 

在游戏中,按键处理机制也需要小心的实现,这里就介绍一种实用的按键处理机制。

在实际的游戏中,一般为了按键灵敏,我们一般不会直接在keyPressed或keyReleased方法内部书写逻辑的代码,而只是在这些方法内部记录或清除按键的记录,而把实际的处理放在线程中进行。这个是本机制中采用的方式。

而且不同手机的按键键值存在不同,为了方便移植,我们把按键转换成自己定义的数值,然后在程序中使用自定义的值进行处理。

该机制中最核心的变量为;

private int keyStates;

用该变量中的一个二进制位来代表一种按键是否按下,如果按下为1,否则为0。每个按键自己进行了定义,定义的代码如下:

/**向上*/

private final int KEY_UP = 1;

/**向下*/

private final int KEY_DOWN = 1 << 1;

/**向右*/

private final int KEY_RIGHT = 1 << 2;

/**向左*/

private final int KEY_LEFT = 1 << 3;

/**5键*/

private final int KEY_FIRE = 1 << 4;

/**左软键*/

private final int KEY_LEFT_SOFT = 1 << 5;

/**右软键*/

private final int UP = 1 << 6;

/**特殊用途按键,例如0键*/

private final int KEY_ZERO = 1 << 7; 

转换按键键值的方法根据手机型号不同,也存在很多的不同,下面是WTK模拟器的实现代码:

/**

* 将物理键值转换为自定义键值

* 说明:该方法和机型相关,下面是WTK的实现

* @param keyCode 物理键值

* @return 自定义键值

*/

private int convertKey(int keyCode) {

switch (keyCode) {

case -6:

return KEY_LEFT_SOFT;

case -7:

return KEY_RIGHT_SOFT;

case Canvas.KEY_NUM2:

case -1:

return KEY_UP;

case Canvas.KEY_NUM4:

case -3:

return KEY_LEFT;

case Canvas.KEY_NUM6:

case -4:

return KEY_RIGHT;

case Canvas.KEY_NUM8:

case -2:

return KEY_DOWN;

case Canvas.KEY_NUM0:

return KEY_ZERO;

}

return 0;

}

按键按下时,首先把物理按键的键值转换为自定义的键值,然后把按键信息保存到按键状态变量keyStates中,保存时采用的是位运算符位或实现的。实现代码如下:

public void keyPressed(int keyCode) {

//转换按键

int key = convertKey(keyCode);

//保存按键

keyStates |= key;

}

按键释放时,和按键按下类似,首先转换键值,然后清除按键信息。清除时把按键状态取反,然后与keyStates位与即可。实现代码如下:

public void keyReleased(int keyCode) {

//转换按键

int key = convertKey(keyCode);

//清除按键

keyStates &= ~key;

}

在界面切换时,需要把按键状态清空,这样只需要把keyStates清零即可。实现代码如下:

/**

* 清除按键

*/

private void clearKey(){

keyStates = 0;

}

实际的按键处理的代码可以在线程中实现。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089