现在的位置: 首页 > 综合 > 正文

完美处理java手机游戏的按键

2012年06月06日 ⁄ 综合 ⁄ 共 837字 ⁄ 字号 评论关闭

      玩过市面上一些java手机游戏,发现很多游戏的按键处理有问题,不是不灵敏,就是不支持多键同时按下.作为一个骨灰级的游戏职业玩家,我实在不能忍受这种不人性化的游戏设计,所以小弟分析了一下具体原因:

 

1) 如果是用MIDP1.0来处理连续的按键消息:

按照要求,应该利用3个函数keyPressed(int keycode), keyReleased(int keycode), keyRepeated(int keycode)

然后去设置一个boolean的标志位,就可以实现连续按键.很多网上的文章也是这样去写的,大家可以去找找,但是这样其实有一个很严重的问题,

就是按键不灵敏,特别才按下的时候,反应很慢.为什么呢?

因为这是MIDP1.0本身的设计缺陷造成的.在MIDP1.0中,游戏的按键响应和游戏的绘制分别由系统线程和游戏线程来处理,经常会出现按键响应不及时的情况,原来是因为线程不同造成的,知道原因解决办法也容易,就是把keyRepeated(int keycode)里面的内容写到游戏绘制的线程里面去,彻底放弃不用keyRepeated(int keycode)这个函数!!!

经测试,问题解决,按键响应很流畅,也支持2个键同时按下,

 

2) 如果用MIDP2.0来做

2.0其实已经把按键和游戏绘制做到一个线程里面了,所以按键非常灵敏.如果要完美地处理多键同时按下,就需要自己写比较复杂的按键逻辑,

如果不需要很完美,就用几个if()语句并列就好,效果也不错.

不过WTK2.5的模拟器在MIDP2.0下会有按键BUG,有时候按下就松不了,必须再按一次才可以松开,建议MIDP2.0下换WTK2.3模拟器

 

 

综上所述,按键问题主要有2个原因引起.

在MIDP1.0下,一是没有用标志位,实现不了连续按键,二是用了标志位,实现了连续按键,但是却不灵敏,因为线程的原因.

解决办法就是设置标志位,并且把应该写在keyRepeated(int keycode)下的内容全部转移到游戏绘制线程里面去.

抱歉!评论已关闭.