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

当前页面: 开发资料首页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;
}
}


}





↑返回目录
前一篇: j2me的配置问题
后一篇: MIDP1.0中处理键盘输入