`
wo_deqing
  • 浏览: 64156 次
文章分类
社区版块
存档分类
最新评论

J2ME游戏按键处理方法简述

 
阅读更多

J2ME游戏按键处理方法简述

摘要:在游戏当中很多时候,要求按键有更多的响应方式,我们的问题就多起来了。

正文:

1.ScanKey()方法
这种方法使在keyPressed()、keyRelease()回调中记录按键的情况,每次Game Loop之前使用ScanKey()函数获得需要的记录情况,这次GameLoop都会使用它产生的按键结果。
这种方法的缺陷是两次Scankey()的时间间隔内,按键的记录可能会被漏掉,这个时间间隔越长(Gameloop运行时间长),这种现象出现的机会就越大。当然,改变按键的记录和读取方法,可以解决大部分出现的问题。
ScanKey()方法根据调用时的keyNow值,确定当前的键值。
publicstaticfinalvoidscanKey(){
int know = keyNow;
keyEdge = know & (~keyPrev);
if (know == 0 || know != keyPrev) {
keyRepWk = 0;
keyRep = 0;
} else {
if (++keyRepWk > keyRepWait) {
-- keyRepWk;
keyRep = know;
} else {
keyRep = 0;
}
}
keyPrev = know;
}
KeyNow的记录方法如下:
publicfinalint getGameKey( int keyCode ){
// Zero is defined to be an invalid key code.
if (keyCode == 0)
return 0;
switch( keyCode ){
caseKEY_NUM2: returnK_UP;
caseKEY_NUM4: returnK_LEFT;
caseKEY_NUM5: returnK_SELECT;
caseKEY_NUM6: returnK_RIGHT;
caseKEY_NUM8: returnK_DOWN;
caseSOFT1_KEYCODE: returnK_SOFT1;
caseSOFT2_KEYCODE: returnK_SOFT2;
caseKEY_NUM7: returnK_NUM7;
caseKEY_NUM9: returnK_NUM9;
caseKEY_NUM0: returnK_NUM0;
caseKEY_NUM1: returnK_NUM1;
caseKEY_STAR: returnK_STAR;
default:
int act = getGameAction( keyCode );
if( act != 0 ){
switch( act ){
case Canvas.FIRE: returnK_SELECT;
case Canvas.UP: returnK_UP;
case Canvas.DOWN: returnK_DOWN;
case Canvas.LEFT: returnK_LEFT;
case Canvas.RIGHT: returnK_RIGHT;
}
}
}
return 0;
}
protectedsynchronizedvoid keyPressed( int keyCode ){
int key = getGameKey( keyCode );
keyNow |= key;
}
protectedsynchronizedvoid keyReleased( int keyCode ){
int key = getGameKey(keyCode);
keyNow &= ~key;
}
这种方法会漏掉在scanKey()调用后,到下次调用前,按下又松开的Click事件。
这里有个假定,就是scanKey()函数会瞬时执行完毕,keyNow不会在调用过程中被改变,事实上,这种情况是很少出现的。
加入keyPress记录在两个scankey()之间被按下的键值,scanKey()完毕后,添加到keyEdge中。
2.GameCanvas.getKeyStatus()方法
如果只在每次循环之前调用getKeyStatus(),缺陷同样存在,同时还缺少了其他特殊要求的按键事件的记录。如果在循环中需要获取按键情况的地方调用getKeyStatus(),造成的问题是一个GameLoop的处理其实面对着随时变化的键输入,一部分代码处理时是一个键键值,另一部分代码处理了另一个键值。具有如此之高灵活性的代码是写不出来的。
3.在keyPressed()回调方法中处理按键
在keyPressed()方法中修改需要响应按键的变量,例如,ARPG中主角的位置、方向、状态等,这就要求GameLoop中的代码肯定会读取这些变量,也很有可能改变它们,同时GameLoop代码要面对这些变量随时改变的情况,即使程序运行不会出问题,也留下了很大隐患。
总结:
我认为2,3两种方法对于状态时刻改变的游戏不能使用,由游戏的复杂程度决定的计算量不会因为分开处理而减少,反而带来了很多不易检查的同步问题。如果程序本身很负责,占用CPU时间长,对应按键的响应必然会延时或者忽略。
分享到:
评论

相关推荐

    J2ME游戏中按键消息处理系统的设计

    ### J2ME游戏中按键消息处理系统的设计 #### 1. 引言 随着移动信息设备的迅速发展,J2ME(Java 2 Micro Edition)游戏开发面临着前所未有的机遇与挑战。移动设备的能力有限以及键盘结构的多样性是开发过程中必须...

    J2ME开发游戏的按键控制法

    在Canvas类中,有四个主要的方法用于处理按键事件: 1. `public int getKeyName(int keyCode)`:这个方法用于获取用户点击的按键对应的数字信息。当用户按下按键时,可以通过此方法得到按键的数字值。 2. `public ...

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏下,上为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

    j2me游戏引擎详解

    1. **图形渲染**:J2ME游戏引擎通常包含一个图形渲染系统,用于处理2D和3D图形。它们利用低级API如MIDP(Mobile Information Device Profile)的Canvas类来实现高效绘制,确保游戏在不同设备上流畅运行。 2. **物理...

    J2ME游戏的基本结构

    MIDlet 类是 J2ME 游戏的核心,它包含了游戏启动、暂停、恢复和退出的方法。这些方法包括 startApp()、pauseApp()、resumeApp() 和 destroyApp()。开发者需要在这些方法中处理游戏逻辑的相应状态。 四、用户界面 ...

    j2me 手机按键对应表、手机按键对应表

    手机按键对应表手机按键对应表手机按键对应表手机按键对应表手机按键对应表手机按键对应表手机按键对应表

    J2ME 游戏开发资源

    4. **事件处理**:J2ME游戏通常需要响应用户输入,如按键和触摸屏事件。事件处理通过注册监听器来实现,例如KeyListener和PointerListener,以便在游戏中控制角色或执行其他操作。 5. **图形与动画**:J2ME中的...

    j2ME游戏开发详解

    总之,j2ME游戏开发涉及到多方面的技术和技巧,从基础的MIDP API学习,到游戏设计、图形动画和音频处理,再到性能优化和分发部署,每一个环节都是成功开发游戏的关键。通过深入理解和实践,开发者可以创造出丰富的...

    j2me游戏100例

    通过这些实例,初学者不仅能学会J2ME的基础语法,还能掌握游戏开发的关键概念,如游戏循环、用户输入处理、图形绘制、音频播放、资源管理等。在实践中不断探索和改进,逐步成长为一名熟练的J2ME游戏开发者。

    j2me游戏开发 经典教程

    j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发j2me游戏开发

    j2me游戏开发及其源码.rar_J2ME游戏_j2me_j2me game source_j2me 游戏_j2me游戏开发

    5. **输入处理**:J2ME游戏通常需要处理键盘和触摸屏输入。通过监听KeyListener或Command对象,可以捕捉用户的按键操作并响应。 6. **音频支持**:虽然J2ME的音频功能相对有限,但可以通过MIDP的MidiSound和Player...

    J2me 游戏原代码

    3. **动画与帧处理**: J2ME 游戏中的动画通常通过更新和重绘帧来实现。开发者需要掌握如何利用 Timer 和 Thread 实现定时器,控制游戏循环的更新频率。 4. **资源管理**: 在内存有限的设备上,有效管理图像、音频和...

    J2ME小游戏J2ME小游戏J2ME小游戏上,下为另一部分

    J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏J2ME小游戏

    J2ME游戏源代码

    J2ME在游戏开发领域有着广泛的应用,尤其是对于那些对内存和处理能力有限的设备。本资源包含多款J2ME游戏的源代码,对于学习和理解移动游戏开发具有很高的价值。 1. **J2ME基础** J2ME由配置(Configurations)和 ...

    经典j2me游戏实例

    **J2ME游戏开发入门详解** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专门用于开发在移动设备和嵌入式系统上运行的应用程序,其中包括许多经典的游戏。本篇将通过分析提供的文件名来探讨J2ME游戏开发的...

    使用J2ME技术开发RPG游戏(二)——按键处理机制.doc

    在使用J2ME技术开发RPG游戏的过程中,按键处理机制是一个关键部分,它关系到游戏的响应速度和玩家体验。本文将深入探讨如何构建这样一个高效、可移植的按键处理系统。 首先,为了确保游戏对按键的反应快速且灵敏,...

    j2me游戏(源码齐全)

    4. **事件处理**:监听用户的按键输入,如方向键控制角色移动,通过 `keyPressed()`, `keyReleased()` 方法实现。 5. **游戏循环**:典型的 J2ME 游戏会有一个主循环(如 `gameLoop()`),负责更新游戏状态、渲染...

    我的第一个j2me游戏代码

    我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我的第一个j2me游戏代码我...

    J2ME游戏开发(第一版)

    《J2ME游戏开发(第一版)》是针对Java Micro Edition(J2ME)平台进行游戏编程的专业指导书籍。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。这本书的焦点在于教导开发者...

    j2me游戏中文教程

    《J2ME游戏开发中文教程》是一本专为Java ME(J2ME)平台上的游戏开发而设计的详细指南。J2ME,全称为Java 2 Micro Edition,是Java技术的一个分支,主要用于移动设备和嵌入式系统的应用程序开发,包括手机、智能...

Global site tag (gtag.js) - Google Analytics