J2ME遊戲按鍵處理方法簡述

2021-04-12 12:24:41 字數 1752 閱讀 4478

j2me遊戲按鍵處理方法簡述 

正文:1.scankey()方法

這種方法使在keypressed()、keyrelease()**中記錄按鍵的情況,每次game loop之前使用scankey()函式獲得需要的記錄情況,這次gameloop都會使用它產生的按鍵結果。

這種方法的缺陷是兩次scankey()的時間間隔內,按鍵的記錄可能會被漏掉,這個時間間隔越長(gameloop執行時間長),這種現象出現的機會就越大。當然,改變按鍵的記錄和讀取方法,可以解決大部分出現的問題。

scankey()方法根據呼叫時的keynow值,確定當前的鍵值。

publicstaticfinalvoidscankey

()elseelse}

keyprev

=know

; }

keynow的記錄方法如下:

publicfinalintgetgamekey(intkeycode ) }

} return0;

} protectedsynchronizedvoidkeypressed(intkeycode )

protectedsynchronizedvoidkeyreleased(intkeycode )

這種方法會漏掉在

scankey()

呼叫後,到下次呼叫前,按下又鬆開的

click

事件。

這裡有個假定,就是

scankey()

函式會瞬時執行完畢,

keynow

不會在呼叫過程中被改變,事實上,這種情況是很少出現的。 加入

keypress

記錄在兩個

scankey()

之間被按下的鍵值,

scankey()

完畢後,新增到

keyedge中。

2.gamecanvas.getkeystatus()方法

如果只在每次迴圈之前呼叫getkeystatus(),缺陷同樣存在,同時還缺少了其他特殊要求的按鍵事件的記錄。如果在迴圈中需要獲取按鍵情況的地方呼叫getkeystatus(),造成的問題是乙個gameloop的處理其實面對著隨時變化的鍵輸入,一部分**處理時是乙個鍵鍵值,另一部分**處理了另乙個鍵值。具有如此之高靈活性的**是寫不出來的。

3.在keypressed()**方法中處理按鍵

在keypressed()方法中修改需要響應按鍵的變數,例如,arpg中主角的位置、方向、狀態等,這就要求gameloop中的**肯定會讀取這些變數,也很有可能改變它們,同時gameloop**要面對這些變數隨時改變的情況,即使程式執行不會出問題,也留下了很大隱患。

總結:我認為2,3兩種方法對於狀態時刻改變的遊戲不能使用,由遊戲的複雜程度決定的計算量不會因為分開處理而減少,反而帶來了很多不易檢查的同步問題。如果程式本身很負責,占用cpu時間長,對應按鍵的響應必然會延時或者忽略。

J2me遊戲中關於遊戲計分顯示

銷毀普通坦克記10分,打死發射子彈坦克記20分,打死快速移動坦克記30分,本次遊戲一共有15個敵人坦克,所以遊戲的總分數為 5 10 20 30 300,當分數為300時遊戲結束。遇到的問題 如何記錄分別打死不同型別的坦克記不同的分數,一開始我使用玩家坦克的子彈碰撞檢測是否碰到了敵人坦克,並且分別實...

j2me遊戲引擎程式結構

2004 11 17 唐良遊戲引擎的結構很多,不過基本上都是在乙個遊戲主迴圈內實現。程式裡面的主迴圈包含了程式框架的最主要的結構體。j2me 的程式一般都包含兩個 class 檔案,乙個是 midlet,乙個是displayable 一般我都是把遊戲的主要 放在 displayable 這個類裡面。...

j2me 遊戲開發 背景篇 TiledLayer

在 中背景是個有意思的東東,先前沒做過應用開發,發覺這個背景開發 有點和其他的應用開發一樣,幾個小圖合成乙個圖,遊戲用的時候再去分開,重複組成背景。其主要常用的函式有 建構函式 tiledlayer int column,int row,image img,int width,int height ...