程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> MIDP1.0中處理鍵盤輸進

MIDP1.0中處理鍵盤輸進

編輯:J2ME

交互性的游戲離不開用戶的輸進,對於手機來說重要的輸進工具就是鍵盤了,固然小,但功效很齊全。

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

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved