j2me
程式設計中的三種低階使用者介面事件處理技術比較
出自:http://blog.csdn.net/mailbomb
在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
的構造方法來實現,**如下:
//使該介面支援按鍵狀態處理
super(true);
這樣該介面就可以進行按鍵狀態處理。和前面的按鍵處理不同,該種處理方式可以脫離
keypressed
使用該處理方式,無論執行緒中的延遲多麼長,系統都可以保持該按鍵的狀態。這個好處是其他處理方式無法做到的。
首先,獲得遊戲按鍵狀態,**如下:
//獲得遊戲的按鍵狀態
int states = getkeystates();
該**的作用是獲得當前按鍵狀態,並把按鍵狀態清空!具體的處理**如下:
//處理按鍵狀態:
if((states & gamecanvas.left_pressed) != 0)
if((states & gamecanvas. right_pressed) != 0)
在midp2.0
的game api
處理中,這個方式使手機遊戲開發重新回歸到傳統的模式中,也使遊戲的處理更加靈活。
簡單介紹了一下
j2me
中低階使用者介面的按鍵處理方式,並進行了一些比較,有不足之處請大家積極補充和指正!
J2ME三種低階使用者介面事件處理技術比較
在j2me的低階使用者介面程式設計中,進行事件處理是經常使用到的技術之一,因為處理手機鍵盤上的按鍵事件是最常使用到的一種,所以就以此為中心,介紹一下實際使用過程中三種處理方式進行說明 1 覆蓋keypressed方法 在繼承了canvas的介面中,如果需要進行按鍵的處理,我們只需要在該類中覆蓋can...
J2ME中的分而治之
這兩天在研究j2me中setclip的用法.兩張切換時,如果是新的從內向外以矩形顯示,可以使用一次setclip設定繪製的矩形區域.但是,現在反回來,從外向內,以矩形框顯示,但是j2me裡面沒有這樣的方法,怎麼辦?有了,咱們給他來個分而治之,一次setclip不行,咱們可以分多次嘛.就現在的情況,可...
J2ME手機程式設計的啟示
最近空閒的時間學了一下遊戲程式設計,感覺還是很有意思。看了很多 後才發現很多東西的不變的 1.對作業系統的了解 不了解作業系統也可以程式設計序,但是,也許在效率上也許會有點的偏差。同時對執行緒的理解也是編好遊戲的關鍵。2.物件導向程式設計 理解設計模式,框架會對我們理解遊戲程式設計有很大的用處,如何...