//不好的例子,不要这么做:class tetriscanvas extends canvas { int leftkey, rightkey, downkey, rotatekey; void init (){ //following must not be done leftkey = getkeycode(left); rightkey = getkeycode(right); downkey = getkeycode(down); rotatekey = getkeycode(fire); }
public void keypressed(int keycode) { if (keycode == leftkey) { moveblockleft(); } else if (keycode = rightkey) {... } }}
下面是更好的解决方案:
class tetriscanvas extends canvas { void init (){ } public void keypressed(int keycode) { int action = getgameaction(keycode); switch (action){ case canvas.left: moveblockleft(); break; case canvas.right: moveblockright(); break; }}}
这个例子是midp 1.0规范中的例子,使用getkeycode ( int gameaction)处理键盘代码值,只能返回一个值。如果这样的话,其它可能的按键映射就不能在midlet中使用了。比如说,在nokia 7650中就会出现问题,nokia 7650有五个方向键和一个操纵杆以及普通的键盘布局,上面这个例子就会返回操纵杆的值而不是键盘的值。这是处理事件的一种与设备无关的方法,也是一种不好的方法。更好的解决方法是在keypressed ()方法内使用getgameaction ( int keycode)。通常,应用程序应该避免使用getkeycode ( int gameaction)方法并且总是使用getgameaction ( int keycode)。
自:yesky.com
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!


