小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

J2ME三種低級用戶界面事件處理比較 處理 比較 事件 按鍵 游戲 代碼 方式 狀態(tài) 手機...

 N_once 2007-05-08
 在J2ME的低級用戶界面編程中,進(jìn)行事件處理是經(jīng)常使用到的技術(shù)之一,因為處理手機鍵盤上的按鍵事件是最常使用到的一種,所以就以此為中心,介紹一下實際使用過程中三種處理方式進(jìn)行說明:
  
  1、 覆蓋keyPressed方法
  
  在繼承了Canvas的界面中,如果需要進(jìn)行按鍵的處理,我們只需要在該類中覆蓋Canvas類里面的這個方法,當(dāng)手機按鍵被按下時,系統(tǒng)會自動調(diào)用該方法,并把被按下的按鍵的鍵值(keyCode)作為參數(shù)傳遞進(jìn)來。所以如果需要處理按鍵事件,只需要在該方法內(nèi)部檢測按下的按鍵的鍵值就可以了。
  
  在手機鍵盤上,可以簡單的分為功能鍵區(qū)域和數(shù)字鍵區(qū)域,功能鍵指手機上的左右軟鍵,中間的導(dǎo)航鍵以及接聽電話和掛機鍵等,數(shù)字鍵區(qū)域指手機鍵盤上的0-9數(shù)字鍵以及*號和#號鍵。其中功能鍵的個數(shù)以及鍵值,不同的手機區(qū)別很大,而數(shù)字鍵的區(qū)域的按鍵個數(shù),以及按鍵的鍵值都是一樣的。
  
  檢測鍵值有如下兩種方法:
  
  a)直接使用keyCode值
  
  直接使用keyCode值的代碼有如下兩種,分別是:
  
  if(keyCode == 52){
  
  //處理代碼
  
  }
  
  或者:
  
  if(keyCode == Canvas.KEY_NUM4){
  
  //處理代碼
  
  }
  
  以上是使用按鍵處理中的兩種代碼書寫風(fēng)格,建議實際使用過程中使用第二種,這樣代碼容易閱讀。
  
  而在實際的游戲開發(fā)過程,除了一些特殊的功能鍵,例如手機上的左右軟鍵,很少使用這種方式進(jìn)行編寫,而是采用下面的方式進(jìn)行處理。
  
  b)使用gameAction(游戲動作)
  
  gameAction是一種將手機鍵盤映射成為游戲動作的機制,通過這種機制,可以使不同手機上的按鍵都能轉(zhuǎn)換為類似或者是相同的游戲動作,當(dāng)然這個工作是由每個手機廠商實現(xiàn)的。
  
  實際使用中的代碼如下:
  
  //將keyCode轉(zhuǎn)換為游戲動作
  
  int action = getGameAction(keyCode);
  
  其中,keyCode和游戲動作的對應(yīng)關(guān)系如下:
  
  Canvas.UP——數(shù)字鍵2和向上導(dǎo)航鍵
  
  Canvas.DOWN——數(shù)字鍵8和向下導(dǎo)航鍵
  
  Canvas.LEFT——數(shù)字鍵4和向左導(dǎo)航鍵
  
  Canvas.RIGHT——數(shù)字鍵6和向右導(dǎo)航鍵
  
  Canvas.FIRE——數(shù)字鍵5和確定導(dǎo)航鍵
  
  Game_A、Game_B、Game_C、Game_D分別對應(yīng)鍵盤上的1、3、7、9或者是7、9、*、#鍵。
  
  轉(zhuǎn)換成游戲動作以后的事件處理代碼如下:
  
  switch(action){
  
  case Canvas.LEFT://向左
  
  //處理代碼
  
  break;
  
  case Canvas RIGHT://向右
  
  break;
  
  case Canvas.UP://向上
  
  break;
  
  ……
  
  }
  
  這個就是MIDP1.0中最常使用的按鍵處理方式。但是無論這種方式如何的優(yōu)越,它還是無法擺脫keyPressed方法的束縛。
  
  這樣就將游戲編程中的三種邏輯:延遲、響應(yīng)用戶操作、重新繪制,隔離了開來,分別在用戶線程和系統(tǒng)線程中進(jìn)行。
  
  為了解決這個不足,MIDP2.0在GameCanvas內(nèi)部引入了一種新的事件處理方式按鍵狀態(tài)(keyStates)機制。
  
  2、 使用keyStates
  
  按鍵狀態(tài)指系統(tǒng)通過一個變量來記錄手機鍵盤上每個和游戲動作有關(guān)的按鍵,如果該鍵按下則設(shè)置對應(yīng)的位(bit)為1,否則為0,然后可以通過位運算獲得哪個按鍵被按下。
  
  注意:按鍵狀態(tài)只能在MIDP2.0的GameCanvas子類中里面使用,而且只能處理和游戲相關(guān)的按鍵。如果支持該處理方式處理游戲按鍵的話,將在keyPressed方法中無法接收到和游戲相關(guān)的按鍵,其他按鍵還可以正常接收響應(yīng)。
  
  如果要使用該功能,首先要在GameCanvas子類的構(gòu)造方法中,讓該界面支持該操作,這個步驟可以使用GameCanvas的構(gòu)造方法來實現(xiàn),代碼如下:
  
  //使該界面支持按鍵狀態(tài)處理
  
  super(true);
  
  這樣該界面就可以進(jìn)行按鍵狀態(tài)處理。和前面的按鍵處理不同,該種處理方式可以脫離keyPressed方法的限制,也就是說可以寫在任意的處理方法內(nèi)部,只需要在線程中調(diào)用即可。
  
  使用該處理方式,無論線程中的延遲多么長,系統(tǒng)都可以保持該按鍵的狀態(tài)。這個好處是其他處理方式無法做到的。
  
  首先,獲得游戲按鍵狀態(tài),代碼如下:
  
  //獲得游戲的按鍵狀態(tài)
  
  int states = getKeyStates();
  
  該代碼的作用是獲得當(dāng)前按鍵狀態(tài),并把按鍵狀態(tài)清空!具體的處理代碼如下:
  
  //處理按鍵狀態(tài):
  
  if((states & GameCanvas.LEFT_PRESSED) != 0){ //向左
  
  }
  
  if((states & GameCanvas. RIGHT_PRESSED) != 0){ //向右
  
  }
  
  在MIDP2.0的Game API處理中,這個方式使手機游戲開發(fā)重新回歸到傳統(tǒng)的模式中,也使游戲的處理更加靈活。
  
  簡單介紹了一下J2ME中低級用戶界面的按鍵處理方式,并進(jìn)行了一些比較,有不足之處請大家積極補充和指正!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多