原文見:http://today.java.net/pub/a/today/2005/07/07/j2me3.html?page=2
構(gòu)建一個(gè)J2ME游戲:從GameCanvas類開始
GameCanvas類繼承自Canvas,提供了一個(gè)屏幕后端的緩沖區(qū),所有的繪制操作都先在這個(gè)緩沖區(qū)里進(jìn)行。當(dāng)所有繪制操作完成后,我們調(diào)用flushGraphics()方法將緩沖區(qū)內(nèi)容輸出到屏幕。這種雙緩沖機(jī)制可以使圖像的移動(dòng)更加平滑,避免圖像的閃爍。緩沖區(qū)大小等于屏幕的大小,而且每一個(gè)GameCanvas實(shí)例有且僅有一個(gè)緩沖區(qū)。
GameCanvas類提供一種存儲(chǔ)按鍵狀態(tài)的機(jī)制,我們可以通過(guò)它方便的了解用戶與游戲的交互。這種機(jī)制可以跟蹤用戶按特殊鍵的次數(shù),調(diào)用getKeyStates()方法返回所有游戲鍵按鍵狀態(tài)的二進(jìn)制表示,1代表上次調(diào)用方法后按過(guò)該鍵,0表示上次調(diào)用后還沒(méi)有按過(guò)該鍵。我們可以跟蹤的游戲狀態(tài)有(這里的鍵都是在Canvas類里定義的):DOWN_PRESSED, UP_PRESSED, RIGHT_PRESSED, LEFT_PRESSED, FIRE_PRESSED, GAME_A_PRESSED, GAME_B_PRESSED, GAME_C_PRESSED和GAME_D_PRESSED。
首先擴(kuò)展GameCanvas類,定制一個(gè)游戲畫布,代碼見清單1。清單2是運(yùn)行例子的MIDlet。
清單 1. MyGameCanvas:游戲畫布的第一個(gè)版本
清單 2 是使用這個(gè)游戲畫布的MIDlet:
清單 2. 運(yùn)行游戲示例的MIDlet類
使用Wireless工具建立一個(gè)工程,導(dǎo)入這兩個(gè)類,然后生成并運(yùn)行工程。確保你的工程目錄res中有這個(gè)圖片文件,并保證名稱為couple.gif, 圖1是運(yùn)行結(jié)果。
圖1. 構(gòu)建一個(gè)游戲:使用GameCanvas類
使用設(shè)備的方向鍵可以左右移動(dòng)屏幕中的小圖像,這是通過(guò)從checkUserInput()里取得按鍵狀態(tài),然后調(diào)用calculateCoupleX(),通過(guò)將按鍵狀態(tài)與GameCanvas里預(yù)定義的按鍵值進(jìn)行與操作(&),得到用戶當(dāng)前按的鍵,然后將實(shí)例變量更新,最終反映到設(shè)備屏幕上。
圖像是在updateGameScreen()方法里被繪制到屏幕上的。這個(gè)方法使用傳入的Graphics對(duì)象進(jìn)行繪制,每一個(gè)GameCanvas只有一個(gè)Graphics對(duì)象。方法首先擦除上次繪制的圖像,然后基于當(dāng)前的coupleX值(還有一直不變的coupleY值)繪制couple.gif圖像,最后將緩沖區(qū)的數(shù)據(jù)輸出到屏幕。
run()方法里的循環(huán)體遵循我們剛開始提出的游戲結(jié)構(gòu)。循環(huán)每30毫秒檢查一次用戶輸入并刷新屏幕。你可以試著將這個(gè)值改變一下,這會(huì)改變刷新的頻率。
最后,注意MyGameCanvas的構(gòu)造器里調(diào)用了父類GameCanvas的構(gòu)造方法,傳入的參數(shù)為true,這表示從Canvas類繼承的按鍵事件機(jī)制被抑制了,因?yàn)槲覀兊拇a不需要這些通知機(jī)制。我們的游戲狀態(tài)用GameCanvas里自帶的按鍵信息(由getKeyStates()方法取得)來(lái)處理已經(jīng)足夠了。通過(guò)抑制“keyPressed”、“keyReleased”和“keyRepeated”等通知機(jī)制,可以提高游戲的性能。
只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
|
||
相關(guān)文章:
|
||