当前页面: 开发资料首页 → J2ME 专题 → MIDP2.0中的键盘事件
MIDP2.0中的键盘事件
摘要: MIDP2.0中的键盘事件
MIDP2.0中的键盘事件作者:
看看MIDP2.0的方法,因为MIDP2.0使用GameCanvas类,所以如果要检查特定的按键是否被按下,只需要检查getKeyStates()的返回值与这些键值进行按位与(&),并根据计算结果来判断就可以了。稍微麻烦些,和paint方法一样,我们可以自定义他的名称:
public void input()
{
int keystates = getKeyStates();
if ((keystates& UP_PRESSED)!= 0 )
y = Math.max(0, y - 1);
else if(( keystates & DOWN_PRESSED ) != 0)
y = Math.min(getHeight(), y + 1);
if((keystates & LEFT_PRESSED ) != 0 )
x = Math.max(0, x - 1);
else if((keystates & RIGHT_PRESSED) != 0)
x = Math.min(getWidth(), x + 1);
}
或者使用下面的形式:
public void input()
{
int keystates = getKeyStates();
switch(keystates)
{
case UP_PRESSED:
y = Math.max(0, y - 1);
break;
case DOWN_PRESSED:
y = Math.min(getHeight(), y + 1);
break;
case LEFT_PRESSED:
x = Math.max(0, x - 1);
break;
case RIGHT_PRESSED:
x = Math.min(getWidth(), x + 1);
break;
}
}
例子程序:
/**
* 文件名:Ocanvas.java
* 画布类
*/import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.*;
//import java.io.*;
//import java.util.*;
public class OCanvas extends GameCanvas implements Runnable
{
//定义变量 private Display display;
private boolean sleeping;
private long frameDelay;
private int XSpeed,YSpeed;
private int x,y;
public OCanvas(Display d)
{
//类构造函数,初始化类变量 super(true);
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() {
// 动画线程开始后运行 Graphics g = getGraphics();
// 主游戏循环 while (!sleeping) {
//更新游戏中的数据变量 input();
//更新屏幕显示 paint(g);
//线程休眠 try {
Thread.sleep(frameDelay);
}
catch (InterruptedException ie) {}
}
}
//在这里更新游戏中的数据变量 private void update() {
x=XSpeed+x;
y=YSpeed+y;
if (x < 0)
x=getWidth();
if(x>getWidth())
x=0;
if (y < 0)
y=getHeight();
if(y>getHeight())
y=0;
}
//这里添加对屏幕的绘制 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);
// 刷新屏幕缓冲区 flushGraphics();
}
//处理按键信息
//midp2。0方法 public void input()
{
int keystates = getKeyStates();
switch(keystates)
{
case UP_PRESSED:
y = Math.max(0, y - 1);
break;
case DOWN_PRESSED:
y = Math.min(getHeight(), y + 1);
break;
case LEFT_PRESSED:
x = Math.max(0, x - 1);
break;
case RIGHT_PRESSED:
x = Math.min(getWidth(), x + 1);
break;
}
}
}