站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题MIDP1.0中处理键盘输入

MIDP1.0中处理键盘输入

摘要: MIDP1.0中处理键盘输入
MIDP1.0中处理键盘输入

作者:


交互性的游戏离不开用户的输入,对于手机来说主要的输入工具就是键盘了,虽然小,但功能很齐全。

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;
}
}

}




2006-11-13 08:47 PM

↑返回目录
前一篇: MIDP2.0中的键盘事件
后一篇: TilePuzzle剖析(1)