程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 在J2ME中基於MIDP1.0實現組合按鍵

在J2ME中基於MIDP1.0實現組合按鍵

編輯:JAVA編程入門知識

  我們知道有些手機是不支持重復按鍵功能,為了模擬重復按鍵的功能,我們不得不使用一個線程來進行處理。對於重復按鍵網上已經有一些文章進行了探討,其實利用線程我們還可以實現組合按鍵的功能。當然,在手機這種設備上,利用組合按鍵進行游戲,有一定的限制,因為手機各個按鍵排列比較緊湊,同時按下兩個甚至三個按鍵在操作上會有局限性。但這也是仁者見仁、智者見智的問題,假如你想提高游戲的可玩性和娛樂性,組合按鍵仍是必不可少的條件。
  
  我定義了一個進行按鍵監聽的類,這個類實現了Runnable接口。在這個類裡要害的一個數據結構就是一個字節型的數組,它是用來存儲當前所有被按下的鍵。我這裡把數組的長度設定為2,主要是從應用的角度來考慮的,因為究竟在當前手機設備上同時按三個鍵進行游戲的不多。下面就是實現組合按鍵的核心代碼。
  
  按鍵事件類:
  
   import Javax.microedition.lcdui.*;
  
  public class NewEvent implements Runnable{
   KeyEventCanvas c=null;
  
   /*
   * 用來判定是否有鍵被按下
   */
   protected boolean switchPoint;
  
   /*
   * 這個數組用來存儲所有同時被按鍵的鍵碼
   */
   protected byte[] keyCode;
  
   /*
   * 訪問數組的索引
   */
   byte index;
  
   public NewEvent(KeyEventCanvas c){
  this.c=c;
  keyCode=new byte[2];
   }
  
   /*
   * 這個方法把被按鍵的鍵碼存儲到數組中
   */
   public synchronized void startAction(int keyCode){
  this.keyCode[index]=(byte)keyCode;
  index=(byte)((index+1)%this.keyCode.length);
   }
  
   /*
   * 當某個鍵被釋放時,這個方法把該鍵存儲在數組中的鍵碼置為0
   */
   public synchronized void stopAction(int keyCode){
  for(int i=0;i<=this.keyCode.length-1;i++){
   if(this.keyCode[i]==(byte)keyCode){
  this.keyCode[i]=0;
  break;
   }
  }
   }
  
   /*
   * 這個方法用來判定是否有被按下的鍵,返回true表示有鍵按下,返回false表示沒有鍵被按下
   */
   public synchronized boolean getSwitchPoint(){
  this.switchPoint=false;
  for(int i=0;i<=this.keyCode.length-1;i++){
   if(this.keyCode[i]!=0){
  this.switchPoint=true;
  break;
   }
  }
  return this.switchPoint;
   }
  
   /*
   * 返回字節數組
   */
   public synchronized byte[] getKeyCode(){
  return this.keyCode;
   }
  
   public void run(){
  byte[] tmp=this.getKeyCode();
  while(true){
   while(this.getSwitchPoint()){
  /*
  * 通過這個循環遍歷數組,碰到被按下的鍵就進行處理
  */
  for(int i=0;i<=tmp.length-1;i++){
   if(tmp[i]!=0){
  switch(c.getGameAction(tmp[i])){
  case Canvas.UP:
   c.y--;//y是在Canvas中定義的一個屬性,表示y軸坐標
   break;
  case Canvas.DOWN:
   c.y++;
   break;
  case Canvas.LEFT:
   c.x--;//x是在Canvas中定義的一個屬性,表示x軸坐標
   break;
  case Canvas.RIGHT:
   c.x++;
  break;
   }
  }
   }
   c.repaint();
   try{
  Thread.sleep(10);
   }catch(InterruptedException e){}
  }
   }
  }
  }
  
  Canvas類:
  
  import javax.microedition.lcdui.*;
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved