《Java 手機/PDA 程序設計入門》讀書筆記10--Game API

Game API由5個類構成
GameCanvas--LayerManager--Layer
Sprite
TiledLayer

GameCanvas繼承Canvas,具有Canvas所有的功能。
而且GameCanvas直接提供了 getKeyStates(),檢測同一時間,按鍵被按下的情形。
GameCanvas還提供了 flushGraphics(),將Off-Screen內容顯示到屏幕上,它並不產生重繪事件。

LayerManager提供管理多個圖層的功能,便於將前景和背景混合在同一畫面上並輸出到屏幕。
LayerManager可以有許多Layer的子類,標準的MIDP提供Sprite和TiledLayer兩種Layer的子類。

GameCanvas
每產生一個GameCanvas子類,其內部就會自動產生一塊大小等同全屏的Off-Screen
構造函數
public MyGameCavas(){
super(true);是否要抑制鍵盤事件(包括keyPressed()/keyReleased()/keyRepeated()),true代表要抑制。
}

getKeyStates()
在調用getKeyStates()之前,該按鈕曾經被按下過,那麼緩衝區中的對應位置會被置成1,否則被設成0。這樣就不會讓程序漏掉用戶曾經按下過的按鈕。
getKeyStates()調用後,就會清除鍵盤狀態緩衝區的內容。
取出鍵盤狀態後,利用位運算就可以得知某個按鈕是否被按下了:
if((keystate&UP_PRESSED)!=0){
……
}
GameCanvas定義的狀態有:
UP_PRESSED  DWON_PRESSED  LEFT_PRESSED  RIGHT_PRESSED
FIRE_PRESSED  GAME_A_PRESSED   GAME_B_PRESSED   GAME_C_PRESSED   GAME_D_PRESSED

LayerManager和Layer
Sprite要用LayerManager的append加入LayerManager中,以便統一控管這些Layer。
Layer的索引值從0開始。值越小離用戶越近,加入的越早。
當Layer已在LayerManager中時,Layer會被LayerManager先刪除,再加入。
隨時可以利用remove()和insert從LayerManager中刪除,插入Layer。

getLayer()取得某個索引值的Layer
getSize()得知目前LayerManager裏有多少個Layer
setViewWindow(X,Y,width,height)設定View Window的大小

Sprite
畫面上獨立移動的圖形
Sprite類會根據讀入的影像先建立一個Row Frame數組,
另外一個Frame Sequence數組的內容都是畫面的索引值。
Current Frame指的是目前屏幕上顯示的畫面。

getRawFrameCount()取得Raw Frame的數量
getFrameSequence()取得Frame Sequence的數量
getFrame()取得 目前Current Frame指向Frame Sequence數組哪個元素
setFrame()設定Frame Sequence某個元素的內容
nextFrame()/prevFrame()讓Current Frame指向FrameSequence數組的下一個或上一個元素

TiledLayer
TiledLayer類會根據讀入的影像先建立一個Static Tiles數組,索引值從1開始
然後根據構造函數的需求,建立名爲Cells的二位數組,缺省Cells沒個元素的內容皆爲0
getCellHeight()/getCellWidth()可以取得單獨一個Cell的高度和寬度
getColumns()得知Cells數組有多少Column
getRows()得知Cells數組有多少Row
getCell(i,j)可以取得Cellls數組第i個Column,第j個Row的內容。
setCell(i,j,k)可以將第i個Column,第j個Row的內容重新設定爲k
fillCells()可以一次設定某範圍中所有Cell的內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章