J2ME編程中三種低級用戶界面事件處理技術_JSP教程
推薦:J2ME 3D編程的第一個3D程序參考WTK2.2提供的demo,完成了第一個3D程序,雖然很簡單,而且有些問題還不是很清楚,還是把代碼共享出來和愿意學習J2ME 3D編程的朋友一起學習。 關于代碼的編譯和運行說明如下:
1、 覆蓋keyPressed方法
在繼承了Canvas的界面中,如果需要進行按鍵的處理,我們只需要在該類中覆蓋Canvas類里面的這個方法,當手機按鍵被按下時,系統(tǒng)會自動調(diào)用該方法,并把被按下的按鍵的鍵值(keyCode)作為參數(shù)傳遞進來。所以如果需要處理按鍵事件,只需要在該方法內(nèi)部檢測按下的按鍵的鍵值就可以了。
在手機鍵盤上,可以簡單的分為功能鍵區(qū)域和數(shù)字鍵區(qū)域,功能鍵指手機上的左右軟鍵,中間的導航鍵以及接聽電話和掛機鍵等,數(shù)字鍵區(qū)域指手機鍵盤上的0-9數(shù)字鍵以及*號和#號鍵。其中功能鍵的個數(shù)以及鍵值,不同的手機區(qū)別很大,而數(shù)字鍵的區(qū)域的按鍵個數(shù),以及按鍵的鍵值都是一樣的。
檢測鍵值有如下兩種方法:
a) 直接使用keyCode值
直接使用keyCode值的代碼有如下兩種,分別是:
if(keyCode == 52){ //處理代碼 } |
或者:
if(keyCode == Canvas.KEY_NUM4){ //處理代碼 } |
以上是使用按鍵處理中的兩種代碼書寫風格,建議實際使用過程中使用第二種,這樣代碼容易閱讀。
而在實際的游戲開發(fā)過程,除了一些特殊的功能鍵,例如手機上的左右軟鍵,很少使用這種方式進行編寫,而是采用下面的方式進行處理。
b) 使用gameAction(游戲動作)
gameAction是一種將手機鍵盤映射成為游戲動作的機制,通過這種機制,可以使不同手機上的按鍵都能轉(zhuǎn)換為類似或者是相同的游戲動作,當然這個工作是由每個手機廠商實現(xiàn)的。
實際使用中的代碼如下:
//將keyCode轉(zhuǎn)換為游戲動作 int action = getGameAction(keyCode); |
其中,keyCode和游戲動作的對應關系如下:
Canvas.UP——數(shù)字鍵2和向上導航鍵
Canvas.DOWN——數(shù)字鍵8和向下導航鍵
Canvas.LEFT——數(shù)字鍵4和向左導航鍵
Canvas.RIGHT——數(shù)字鍵6和向右導航鍵
Canvas.FIRE——數(shù)字鍵5和確定導航鍵
Game_A、Game_B、Game_C、Game_D分別對應鍵盤上的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方法的束縛。
這樣就將游戲編程中的三種邏輯:延遲、響應用戶操作、重新繪制,隔離了開來,分別在用戶線程和系統(tǒng)線程中進行。
為了解決這個不足,MIDP2.0在GameCanvas內(nèi)部引入了一種新的事件處理方式按鍵狀態(tài)(keyStates)機制。
2、 使用keyStates
按鍵狀態(tài)指系統(tǒng)通過一個變量來記錄手機鍵盤上每個和游戲動作有關的按鍵,如果該鍵按下則設置對應的位(bit)為1,否則為0,然后可以通過位運算獲得哪個按鍵被按下。
注意:按鍵狀態(tài)只能在MIDP2.0的GameCanvas子類中里面使用,而且只能處理和游戲相關的按鍵。如果支持該處理方式處理游戲按鍵的話,將在keyPressed方法中無法接收到和游戲相關的按鍵,其他按鍵還可以正常接收響應。
如果要使用該功能,首先要在GameCanvas子類的構造方法中,讓該界面支持該操作,這個步驟可以使用GameCanvas的構造方法來實現(xiàn),代碼如下:
//使該界面支持按鍵狀態(tài)處理 super(true); |
這樣該界面就可以進行按鍵狀態(tài)處理。和前面的按鍵處理不同,該種處理方式可以脫離keyPressed方法的限制,也就是說可以寫在任意的處理方法內(nèi)部,只需要在線程中調(diào)用即可。
使用該處理方式,無論線程中的延遲多么長,系統(tǒng)都可以保持該按鍵的狀態(tài)。這個好處是其他處理方式無法做到的。
首先,獲得游戲按鍵狀態(tài),代碼如下:
//獲得游戲的按鍵狀態(tài) int states = getKeyStates(); |
該代碼的作用是獲得當前按鍵狀態(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中低級用戶界面的按鍵處理方式,并進行了一些比較。
分享:用J2ME在移動設備上實現(xiàn)動畫1使用MIDP(Mobile Information Device Profile)的開發(fā)人員經(jīng)常會抱怨用些什么辦法才可以在一個MIDlet上顯示動畫。 MIDP 1.0 沒有直接提供對動畫的支持(正在開發(fā)中的MIDP 2.0支持),但真
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復習整理
- JSP腳本元素和注釋復習總結示例
- JSP FusionCharts Free顯示圖表 具體實現(xiàn)
- 網(wǎng)頁模板:關于jsp頁面使用jstl的異常分析
- JSP頁面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項目中連接Access數(shù)據(jù)庫的配置方法
- JDBC連接Access數(shù)據(jù)庫的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對路徑/虛擬路徑
- (jsp/html)網(wǎng)頁上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對路徑下的圖片解決方法
- 相關鏈接:
- 教程說明:
JSP教程-J2ME編程中三種低級用戶界面事件處理技術
。