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