MIDP2.0中的键盘事件

作者:潇潇  出处:www.j2mefans.com
该文章为本站原创,如有引用,请注明出处和作者


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

}