J2ME键盘响应详解及处理方法
j2me上的键盘响应估计是继画图后出现Bug最多的地方了,尤其像手机游戏这种键盘操作较多的J2ME程序。在工作的过程中CoCoMo曾不止一次的被问及有关键盘响应的问题,pigham前两天还在为他的游戏在7210上按键不能及时响应而发愁,就在刚才我还在努力的解决着S700上不支持getGameAction()的问题。虽然CoCoMo在这个行业已经工作了一年多了,但是键盘响应的bug仍然时常蹦出来刺激我的神经,所以千万不要小瞧了这个不起眼的keyPressed()
keyPressed()响应的位置:
弄清楚keyPressed()响应的位置对最终解决按键响应不及时很有帮助。理论上keyPressed()是由KVM负责的,当Canvas的子类被Display.setCurrent()之后,只要按下任何按钮就会引发keyPressed()。但这只是某些人一厢情愿的美好愿望,仅限于理论研究的范畴,理论和实际往往相差甚远不是吗。实际上keyPressed()的响应是有位置的,CoCoMo可以用如下程序做一个实验:
try { //解决getGameAction不被支持的情况 keyCode = s_game.getGameAction(code); } catch(Exception e) { keyCode = CRes.KEY_NONE; }
?
不支持的时候会抛出一个异常,让keyCode不做转换即可。哈哈。
我只想插一句关于键盘映射的题外话话:
0-9,*,#是不需要做键盘映射的。只剩下几个软键及方向键,确定键需要获取键值,相信大家能很轻松的解决。