使用J2ME技术开发RPG游戏(二)——按键处理机制
来源:互联网 发布:linux下svn使用 编辑:程序博客网 时间:2024/05/21 01:45
使用J2ME技术开发RPG游戏(二)——按键处理机制
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
在游戏中,按键处理机制也需要小心的实现,这里就介绍一种实用的按键处理机制。
在实际的游戏中,一般为了按键灵敏,我们一般不会直接在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;
}
实际的按键处理的代码可以在线程中实现。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1492291
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 使用J2ME技术开发RPG游戏(一)——程序框架
- 使用J2ME技术开发RPG游戏(一)——程序框架
- 使用J2ME技术开发RPG游戏(一)——程序框架
- 使用J2ME技术开发RPG游戏(一)——程序框架
- 使用J2ME技术开发RPG游戏(一)——程序框架
- 使用J2ME技术开发RPG游戏(一)——程序框架
- EasyJF第一次网下交流会成功召开
- 让代码与视图模板的分离
- 为什么 FleaPHP 使用 Table Data Gateway 代替 Active Record 来提供数据库访问服务
- EasyJWeb的验证系统的Bug及使用心得
- EasyJWeb的验证系统的Bug及使用心得
- 使用J2ME技术开发RPG游戏(二)——按键处理机制
- 关于 FleaPHP
- 让spring帮助你在MVC层解决JPA的缓迟加载问题
- EasyJWeb、RoR、JSF&Struts2,谁更Easy?
- 文化.性格.年龄.赞扬
- 学习 REST
- 想动就“动”起来
- EasyJWeb中防重复提交使用及原理
- EasyJWeb中防重复提交使用及原理