J2ME三種低階使用者介面事件處理技術比較

2021-08-29 09:13:29 字數 2050 閱讀 9549

在j2me的低階使用者介面程式設計中,進行事件處理是經常使用到的技術之一,因為處理手機鍵盤上的按鍵事件是最常使用到的一種,所以就以此為中心,介紹一下實際使用過程中三種處理方式進行說明: 

1、 覆蓋keypressed方法

在繼承了canvas的介面中,如果需要進行按鍵的處理,我們只需要在該類中覆蓋canvas類裡面的這個方法,當手機按鍵被按下時,系統會自動呼叫該方法,並把被按下的按鍵的鍵值(keycode)作為引數傳遞進來。所以如果需要處理按鍵事件,只需要在該方法內部檢測按下的按鍵的鍵值就可以了。

在手機鍵盤上,可以簡單的分為功能鍵區域和數字鍵區域,功能鍵指手機上的左右軟鍵,中間的導航鍵以及接聽**和掛機鍵等,數字鍵區域指手機鍵盤上的0-9數字鍵以及*號和#號鍵。其中功能鍵的個數以及鍵值,不同的手機區別很大,而數字鍵的區域的按鍵個數,以及按鍵的鍵值都是一樣的。

檢測鍵值有如下兩種方法:

a) 直接使用keycode值

直接使用keycode值的**有如下兩種,分別是:

if(keycode == 52)

或者:if(keycode == canvas.key_num4)

以上是使用按鍵處理中的兩種**書寫風格,建議實際使用過程中使用第二種,這樣**容易閱讀。 而在實際的遊戲開發過程,除了一些特殊的功能鍵,例如手機上的左右軟鍵,很少使用這種方式進行編寫,而是採用下面的方式進行處理。

b) 使用gameaction(遊戲動作)

gameaction是一種將手機鍵盤對映成為遊戲動作的機制,通過這種機制,可以使不同手機上的按鍵都能轉換為類似或者是相同的遊戲動作,當然這個工作是由每個手機廠商實現的。

實際使用中的**如下:

//將keycode轉換為遊戲動作

int action = getgameaction(keycode);

其中,keycode和遊戲動作的對應關係如下:

canvas.up——數字鍵2和向上導航鍵

canvas.down——數字鍵8和向下導航鍵

canvas.left——數字鍵4和向左導航鍵

canvas.right——數字鍵6和向右導航鍵

canvas.fire——數字鍵5和確定導航鍵

game_a、game_b、game_c、game_d分別對應鍵盤上的1、3、7、9或者是7、9、*、#鍵。

轉換成遊戲動作以後的事件處理**如下: 

switch(action)

這個就是midp1.0中最常使用的按鍵處理方式。但是無論這種方式如何的優越,它還是無法擺脫keypressed方法的束縛。

這樣就將遊戲程式設計中的三種邏輯:延遲、響應使用者操作、重新繪製,隔離了開來,分別在使用者執行緒和系統執行緒中進行。

為了解決這個不足,midp2.0在gamecanvas內部引入了一種新的事件處理方式按鍵狀態(keystates)機制。

2、 使用keystates

按鍵狀態指系統通過乙個變數來記錄手機鍵盤上每個和遊戲動作有關的按鍵,如果該鍵按下則設定對應的位(bit)為1,否則為0,然後可以通過位運算獲得哪個按鍵被按下。

注意:按鍵狀態只能在midp2.0的gamecanvas子類中裡面使用,而且只能處理和遊戲相關的按鍵。如果支援該處理方式處理遊戲按鍵的話,將在keypressed方法中無法接收到和遊戲相關的按鍵,其他按鍵還可以正常接收響應。

如果要使用該功能,首先要在gamecanvas子類的構造方法中,讓該介面支援該操作,這個步驟可以使用gamecanvas的構造方法來實現,**如下:

使用該處理方式,無論執行緒中的延遲多麼長,系統都可以保持該按鍵的狀態。這個好處是其他處理方式無法做到的。

首先,獲得遊戲按鍵狀態,**如下:

//獲得遊戲的按鍵狀態

int states = getkeystates();

該**的作用是獲得當前按鍵狀態,並把按鍵狀態清空!具體的處理**如下:

//處理按鍵狀態:

if((states & gamecanvas.left_pressed) != 0)

if((states & gamecanvas. right_pressed) != 0)

在midp2.0的game api處理中,這個方式使手機遊戲開發重新回歸到傳統的模式中,也使遊戲的處理更加靈活。

J2ME程式設計中的三種低階使用者介面事件處理技術比較

j2me 程式設計中的三種低階使用者介面事件處理技術比較 出自 http blog.csdn.net mailbomb 在j2me 的低階使用者介面程式設計中,進行事件處理是經常使用到的技術之一,因為處理手機鍵盤上的按鍵事件是最常使用到的一種,所以就以此為中心,介紹一下實際使用過程中三種處理方式進行...

j2me中低階介面字型處理

使用字型 在j2me手機程式設計中,可以通過使用字型類 font在低階使用者介面中,獲得更好的表現效果,那麼如何使用font類呢?首先,由於手機裝置的限制,手機中支援的字型型別很有限,所以在j2me中只能使用手機支援的預設字型來構造font類物件。下面是建立font類的物件時使用的方法 getfon...

J2ME小技巧 在低階使用者介面上分行顯示文字

j2me 小技巧 在低階使用者介面上分行顯示文字 出自 http blog.csdn.mailbomb 在 j2me 的低階使用者介面開發中,經常會遇到需要在 canvas 上顯示大量的文字,例如關於介面 遊戲說明 遊戲公告等資訊。如果在設計時,將文字的內容和長度都固定,既不利於修改也不利於維護。下...