J2ME开发体会:连续按键处理的改善及滚屏

来源:互联网 发布:职人觉醒 知乎 编辑:程序博客网 时间:2024/06/06 19:50

 J2ME开发体会:连续按键处理的改善及滚屏

在J2ME中开发可交互的图形图像软件时,CANVAS类是必不可少的一个类,它提供了较丰富的图元函数和常用图形函数,而且内置了对用户按键的支持。

与MS的Visual Studio相比,封装的更好,编写代码直接了当,感觉更爽呵。
本文不讨论这个类中的绘图函数(已有无数强文作过论述),而是介绍CANVAS类按键处理开发中的一点体会。
1.CANVAS类的按键处理及连续按键处理改善:
keyPressed、keyReleased、keyRepeated是CANVAS的按键事件响应函数,在继承的GameCanvas类中也同样支持。参数为keycode,值是:
Canvas.UP、Canvas.DOWN、Canvas.LEFT、Canvas.RIGHT、Canvas.FIRE、Canvas.GAMEA、Canvas.GAMEB、Canvas.GAMEC、Canvas.GAMED
这些值与手持移动设备上的按键存在对应,具体的MAP视厂商的硬件支持而定,不过一般也就是导航的4个方向键和"确定"键,至于GAMEx,现在有的手机已经提供专门的“A”、“B”游戏按键来支持了。没有游戏按键的手机,也会有对应按键的。
在软件调试中发现,CANVAS应是通过轮询来检测按键事件的。这样会造成一个问题:当连续按键不松开时,key系列函数不能立即调用,每次调用会出现明显的时间间隔。对于交互式的游戏软件而言,这就叫做“卡”,是最让用户心烦意乱的。
不过博主通过实践找到了一个比较满意的办法来解决。
首先在JAVA代码首部的类声明中加入implements Runnable,在构造时添加2个变量:Private int keys,kcode。
在keyPressed中加入:

在keyReleased中加入:

最后,在run()中加入一个while死循环来检测keys:一旦为1,就判断kcode的值(Canvas.UP等)并处理。
可以想想,当用户连续按键未松开时,将由run函数以线程方式执行按键处理代码,而不再依靠周期性的按键轮询处理,这样,连续按键处理的速度就会大大提高。
那么实际效果如何呢?博主将基于此改善的动画软件在真机上实测,当按下方向键不松开时,精灵移动(响应)的速度果然流畅了很多,哈哈。

2 滚屏的实现
滚屏实质是将设备屏幕作为一个窗口来动态显示尺寸大于屏幕的图象。
对于JAVA的Graphics类而言,用translate移动原点是极为简单的事。CANVAS内置了Graphics参数,paint可以直接调用用translate实现滚屏函数呵!

好啦,本文暂且就聊这么多,博主dmax22cn也在不断学习中,以后还会有这方面的心得写出来的!


原文链接:http://hi.baidu.com/dmax22cn/blog/item/d2f2e2d0e57b6589a1ec9c31.html

原创粉丝点击