很就沒有關心J2ME的情況了,今天看到一篇介紹MIDP 2.0的文章就翻譯了出來,雖然不是很新。偶的E文不好,有錯的地方希望大家諒解!
原文出處:http://www.microjava.com/articles/techtalk/game_api
MIDP 2.0: The Game API
by Mikko Kontio
MIDP 2.0 爲移動開發者帶來幾項新特性,比如支持媒體、更好的用戶界面、新的連通協議、enabled push、空中下載和更好的安全性。然而一個最讓人感興趣的新特性就是GAME API。
這篇文章重點介紹GAME API裏的新類和它們的用法,開發環境使用J2ME Wireless Toolkit 2.0 Beta。
The Game API
The Game API
幫助開發者(遊戲開發者或其他想得到更好用戶界面的人)快速開發有較好可用性且節約設備資源(比如內存)的用戶界面。The Game
API也有利減小jar文件的大小。在MIDP
1.0中,開發者必須寫自己的繪圖程序來得到好的效果,這導致jar文件的增大。使用MIDP提供的程序可以得到較好的效果並且減小jar文件的大小,因
此開發者應該信任所有支持MIDP 2.0 GAME API的設備。
Game API的基本概念是game screen包含了layers,背景在一個層上,道路在一層上,而英雄
的配角在其他層上。所有這些層能被分別的操作。API甚至允許直接在層上繪圖。因此遊戲區域也比screen大很多,並且在遊戲代碼卷屏也成爲可能。
The Game API提供一個觀察窗口,它能觀察整個遊戲區域。這個窗口能很容易的被移動,觀察窗口上的點可以對於實際屏幕上點。
The Game API能在javax.microedition.lcdui.game中找到。API中有5個新類,它們是:GameCanvas, Layer, LayerManager, Sprite和TiledLayer.
GameCanvas是個抽象類,它提供了遊戲用戶界面的基本。它比Canvas有2點益處。它擁有off-screen buffer;它能得到設備物理鍵的狀態
Layer是個抽象類。它能描繪從Layer繼承來的game.Sprite和TiledLayer元素。Layer通常被用做它自己的子類。
LayerManager是管理幾個層物體並將它們繪到屏幕上的類。
Sprite是一個能包含存儲在一個image裏幾幀的類。例如一個image包含4個圖片表示運動的小狗。Sprite能用image的一部分表示一幀並構造一個顯示序列來建立一個運做。它也被用來在其他Sprite或TiledLayer裏檢測碰撞。
TiledLayer有點象Sprite,但它主要用來顯示背景、道路或其他大的區域。TiledLayer由單元網格組成,它能被圖片和標題填充。因此背景要由
處理用戶輸入
在MIDP 2.0裏處理用戶輸入和1.0裏有少許的不同。在1.0裏你能用getGameAciton()方法來得到遊戲動作。但在2.0裏你要用
getKeyStates()方法來得到按鍵狀態。下面的代碼顯示了怎麼樣做,首先我們通過檢測變量keyState得到4個按鍵(up,down,
left,right)的狀態並做我們想做的。
使用off-screen buffer
使用off-screen
buffer很容易創建無閃爍的動畫而開發者不用額外的圖形對象去建立兩個緩衝。在GameCanvas裏的off-screen
buffer提供一個off-screen圖形物體,它能被用來繪象素或層或sprites到canvas上。當有任何東西被繪的它都能立即被更新。
在下面的代碼中getGraphics()方法被用來得到off-screen
buffer。在循環裏,buffer被用來繪LayerManager(layers
object)的內容。當調用flushGraphics()方法時buffer被更新。這兒也有flushGraphics(int x,int
y,int width,int hight)方法,被用來刷新特點範圍的off-screen buffer。
使用層
在遊戲裏(或在繪圖應用程序裏)Screen經常由不同的物體組成,他們任何一個都可能和其他一個或幾個有聯繫。舉個例子,一隻蜜蜂能在森林、陸地、水面和空中飛,但在迷宮裏主角去不能穿牆。
在MIDP2.0 Game API裏介紹了層,它提供了方法來管理物體或屏幕上的內容。層能夠是TiledLayer(背景,牆)、Sprite(蜜蜂)或其他從Layer繼承來的類。
下面的代碼是把程序裏不同的部分重疊在一起,如圖所示來介紹Layer的用法。代碼中重要的類是TiledLayer,LayerManager,Image。image類是保存幾個相同大小圖片的。TiledLayer使用這些圖片把他們繪在柵格里。
當一個TiledLayer實例被創建時,構造函數需要5個參數。這些參數是列號、行號、圖片、寬、高。在例子中,柵格有40列,16行,圖片是Tiles.png,高和寬是7個象素。代碼開始最後一個整數參考具體的用法。
在TiledLayer
實例被創建後,調用fillCells()方法來填充柵格。在代碼最後一行TiledLayer被加到LayerManage中。append()方法是
觀察者最大限度的安置layer。當然你可以用insert()方法插入你的layer在任何位置。
使用Sprites
如前所述,Sprites描繪了屏幕上的一個單一物體。這個物體可以是推石頭的小孩、一個射擊敵人的戰艦。Sprite類的工作方式有點類似
tilesLayer類(他們都是從Layer繼承來的)。Sprites也可以將幾個相同大小圖片當作一個圖片來顯示,無論如何這些圖片沒有標題,他們
是動畫裏的幀。Sprites可以是活動的,可以顯示幀讓它看起來是活動的。
下面的代碼說明怎樣創建一個Sprites的實例,這個正確的原則也適用於TiledLayer.
try {
spriteImage = Image.createImage("/Sprite.png");
} catch (IOException e) {}
sprite = new Sprite(spriteImage, 7, 7);
在Layer類裏,有2種方法讓Sprites在遊戲區域裏移動
move(int dx, int dy)
setPositions(int x, int y)
讓LayerManage控制Sprites的繪製和移動是重要的,在代碼裏設置和存儲Sprites也是很重要的。下面的代碼說明了怎麼樣移動Sprites。Sprites裏的圖片是7個象素高寬的,因此Sprites每次移動7個象素。
在遊戲中另一個重要的就是判斷碰撞。Sprites可以停留在遊戲區域中一個特定位置,這對判斷Sprites是否和其他物體碰撞是很重要的。在遊戲裏碰撞意味着改變方向或遊戲結束。Sprites用下面4個方法幫助開發者判斷碰撞:
collidesWith(Image image, int x, int y,
boolean pixelLevel)
collidesWith(Sprite s, boolean pixelLevel)
collidesWith(TiledLayer t, boolean pixelLevel)
defineCollisionRectangle(int x, int y,
int width, int height)
總結
這篇文章介紹了MIDP2.0裏的一個新特性,Game API並給出了一個例子,它用到了API裏的許多特性。這些可以幫助開發者應付遊戲區域比屏幕大很多的情況,並可以在多個層上繪物體。
來自Wireless Toolkit 2.0 Beta的競爭者不很快,事實上這些特性中的一些使用起來仍然有點慢,但它帶給我們基本的支持。重要的是這些已經被軟件開發者開始設計。你不得不思考2次你想做什麼;怎樣做更好。最後沒有平臺和API提供壞的設計。
轉自:http://www.j2megame.org/index.php/content/view/900/125.html