MIDP1.0中处理键盘输入
|
|
Author: 一滴蔚蓝色 | Date: 2008-03-01 |
View: 852 |
开发技术 - 程序设计 | Digg:
0
|
|
作者:潇潇 出处:www.j2mefans.com 该文章为本站原创,如有引用,请注明出处和作者 交互性的游戏离不开用户的输入,对于手机来说主要的输入工具就是键盘了,虽然小,但功能很齐全。 1、按键代码 当用户按下某个键时,程序就会接受到按键事件。每一个按键都被分配一个键码(keyCode)。如KEY_NUM0 的值为 48 ,而他的按键名称为0,KEY_NUM9的值为57,按键名称为9,中间的2~8,按循序分布。 2、按键事件 总的来说,处理按键事件的有下面3种方法: protected void keyPressed( int keyCode ),当按键按下时触发。 protected void keyReleased( int keyCode ) ,当键盘释放时触发。 protected void keyRepeated( int keyCode ),当键盘重复石调用 下面是MIDP1.0中常见的方法,直接在代码中添加下面语句即可: public void keyPressed(int keyCode) { swith(keyCode) { case 48 //添加自己的动作 break; case 48 //添加自己的动作 break; case 48 //添加自己的动作 break; default: //添加自己的动作 break; } } 当然我们还可以使用getKeyName(keyCode);得到按键的名字。 3、游戏中的动作 对于游戏来说,我们不可能要求每种手机的按键功能都一样,为了提高应用程序的可移植性,我们常使用游戏动作来替代键码。如:游戏动作UP,DOWN, LEFT, RIGHT, FIRE等。 不管手机中实际使用那五个键表示这四个动作,我们都可以使用getGameAction()方法将键码转换为游戏动作。 按么我们的代码就变成了下面的形式: //处理按键信息 public void keyPressed(int keyCode) { int keystates = getGameAction(keyCode); switch(keystates) { case UP: y = Math.max(0, y - 2); break; case DOWN: y = Math.min(getHeight(), y + 2); break; case LEFT: x = Math.max(0, x - 2); break; case RIGHT: x = Math.min(getWidth(), x + 2); break; } } 下面我们实际的写了一个例子,我们可以在其中使用游戏键来控制屏幕上小方块的移动: 例子程序: /** * 文件名:Ocanvas.java * 画布类 */ import javax.microedition.lcdui.*; import java.io.*; import java.util.*; import java.lang.Thread; public class OCanvas extends Canvas implements Runnable { //定义变量 private Display display; private boolean sleeping; private long frameDelay; private int XSpeed,YSpeed; private int x,y; public OCanvas(Display d) { //类构造函数,初始化类变量 super(); display = d; // 设置帧频 (30 fps) frameDelay = 33; } void start() { // 设置这个画布为当前屏幕 display.setCurrent(this); // 初始化一些游戏中的变量,载入相关图片 x=getWidth()/2-10; y=getHeight()/2-10; XSpeed = YSpeed = 3; // 开始动画线程 sleeping = false; Thread t = new Thread(this); t.start(); } public void stop() { // 停止动画线程 sleeping = true; } public void run() { // 动画线程开始后运行 // 主游戏循环 while (!sleeping) { //更新屏幕显示 repaint(); //线程休眠 try { Thread.sleep(frameDelay); } catch (InterruptedException ie) {} } } //这里添加对屏幕的绘制 public void paint(Graphics g) { // 清除屏幕 g.setColor(0xffffffff); g.fillRect(0, 0, getWidth(), getHeight()); // 重绘屏幕 g.setColor(0,0,0); g.fillRect(x,y,20,20); } //处理按键信息 public void keyPressed(int keyCode) { int keystates = getGameAction(keyCode); switch(keystates) { case UP: y = Math.max(0, y - 2); break; case DOWN: y = Math.min(getHeight(), y + 2); break; case LEFT: x = Math.max(0, x - 2); break; case RIGHT: x = Math.min(getWidth(), x + 2); break; } } } 更多阅读: |
尚无评论发表