第12章MIDP游戲編程課件_第1頁
第12章MIDP游戲編程課件_第2頁
第12章MIDP游戲編程課件_第3頁
第12章MIDP游戲編程課件_第4頁
第12章MIDP游戲編程課件_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第12章MIDP游戲編程主講教師:賈震斌本章目錄12.1MIDP2.0GameAPI概述12.2游戲容器GameCanvas類12.3游戲精靈Sprite12.4游戲地圖TiledLayer類12.5圖層管理LayerManager類12.6游戲?qū)嵗好鄯渖鋼舯菊聦W(xué)習(xí)目標(biāo)了解MIDP游戲編程基本概念、常用類及方法、基本程序框架12.1MIDP2.0GameAPI概述12.1.1GameAPI類庫簡介MIDP提供了GameCanvas類庫實現(xiàn)游戲編程所需功能,GameCanvas是Canvas的擴(kuò)展為了便于操控圖像,可以使圖像中不同的內(nèi)容位于不同的層面上,這就是圖層的概念,如讓人物和背景位于不同的圖層上。對每一圖層可以分別管理、操控。為此,MIDP提供了圖層功能,圖層由類Layer實現(xiàn),而多個圖層的管理又由LayerManger類負(fù)責(zé)。不同的圖層疊加在一起形成了一個完整的圖像。由于受屏幕大小限制,圖像可能無法完全顯示出來,LayerManger類提供了觀察窗口ViewWindow,通過移動觀察窗口實現(xiàn)圖像不同部分的顯示。圖層中有兩個特殊圖層:Sprite和TiledLayer,Sprite存放游戲角色,TiledLayer存放游戲背景12.2游戲容器GameCanvas類12.2.1屏幕緩沖每一個GameCanvas對象創(chuàng)建時首先在內(nèi)存中開辟屏幕大小的緩沖區(qū),在緩沖區(qū)中繪制圖形,需要時再將緩沖區(qū)內(nèi)容復(fù)制到屏幕上GameCanvas使用過程創(chuàng)建GameCanvas對象,同時在內(nèi)存中創(chuàng)建緩沖區(qū)建立Graphics對象,調(diào)用GameCanvas的getGraphics()方法,獲得Graphics對象,通過Graphics對象往內(nèi)存中繪圖,繪圖過程與Canvas中不同的是繪圖過程不一定要在paint()方法中調(diào)用GameCanvas的flushGraphics()方法將圖像送到屏幕上12.2.2獲得鍵盤輸入狀態(tài)利用繼承于Canvas類的鍵盤按鍵事件利用GameCanvas專用的getKeyStates()方法??梢匀〉枚鄠€同時按下的鍵值的組合鍵值常量,參見教材p.20812.3游戲精靈Sprite12.3.1幀控制Sprite是Layer類的子類,負(fù)責(zé)主要角色圖層,這個圖層由一個個圖像組合起來,每一個圖像稱為一幀,每一幀圖像按照一定時間間隔顯示出來形成動畫創(chuàng)建幀的方法如下:Sprite(Image

image,

int

framWeidth,

int

frameHeight)幀的順序也就是幀的索引值從0開始,Sprite提供了切換順序的方法

voidsetFrame(int

sequenceIndex)

voidnextFrame()

voidprevFrame()12.3.2精靈翻轉(zhuǎn)圖像可以以任何位置為中心旋轉(zhuǎn),Sprite提供了方法,如:voiddefineReferencePixel(int

x,int

y)

voidsetRefPixelPosition(int

x,int

y)12.3.3碰撞檢測在GameCanvas中可以通過collidesWith()方法的不同參數(shù)的重載形式檢測Sprite與Image、Sprite與Sprite、Sprite與TiledLayer之間是否相遇(即碰撞檢測),方法如下:booleancollidesWith(Image

image,int

x,int

y,boolean

pixelLevel)

ChecksforacollisionbetweenthisSpriteandthespecifiedImagewithitsupperleftcorneratthespecifiedlocation.

booleancollidesWith(Sprite

s,boolean

pixelLevel)

ChecksforacollisionbetweenthisSpriteandthespecifiedSprite.

booleancollidesWith(TiledLayer

t,boolean

pixelLevel)

ChecksforacollisionbetweenthisSpriteandthespecifiedTiledLayer.其中參數(shù)pixelLevel表示檢測模式,在MIDP2.0中定義了兩種模式:像素模式和邊界模式。像素模式用于兩個不透明的像素重疊的碰撞檢測,而邊界模式用于邊界相接時表示相遇的情況。12.4游戲地圖TiledLayer類12.4.1游戲中的地圖Sprite將屏幕分成大小相同的網(wǎng)格,在每個網(wǎng)格里面顯示一張圖像,每個圖像都會有一個索引值,然后組合成一個完整的圖像,這種方式適合用于一個圖像,并且圖像很復(fù)雜的情況。TiledLayer也是將一個大圖像分割成網(wǎng)格狀,形成很多小的圖像,按照需要將一些小圖像組合起來,形成一個完整的圖像。TiledLayer在分網(wǎng)格的時候,這些分割成的小圖像都有一個索引值,索引時有動態(tài)和靜態(tài)之分,靜態(tài)索引值從1開始計數(shù),動態(tài)索引值從-1開始計數(shù),動態(tài)索引值和靜態(tài)索引值之間存在關(guān)聯(lián)。TiledLayer類構(gòu)造函數(shù):TiledLayer(int

columns,int

rows,Image

image,int

tileWidth,int

tileHeight)參數(shù)說明:int

columns:網(wǎng)格的列數(shù)int

rows:網(wǎng)格的行數(shù)Image

image:被分割的圖像int

tileWidth:分割的小圖寬度int

tileHeight:分割的小圖高度注:構(gòu)造函數(shù)獲得的是靜態(tài)網(wǎng)格TiledLayer類獲得與靜態(tài)網(wǎng)絡(luò)關(guān)聯(lián)的動態(tài)網(wǎng)格的方法:voidsetAnimatedTile(int

animatedTileIndex,int

staticTileIndex)將Tiley放到指定的網(wǎng)絡(luò)里:voidsetCell(int

col,int

row,int

tileIndex)將Tiley放到指定區(qū)域的網(wǎng)絡(luò)里:voidfillCells(int

col,int

row,int

numCols,int

numRows,int

tileIndex)12.5圖層管理LayerManager類圖層的概念就是將圖像分層處理疊加顯示形成完整游戲圖像,圖層用Layer類處理,各圖層的管理由LayerManager負(fù)責(zé)。LayerManager類的方法將各圖層添加到屏幕上:voidappend(Layer

layer)刪除某個圖層:voidremove(Layer

layer)插入某個圖層:voidinsert(Layer

layer,int

index)設(shè)置視圖觀察窗口:voidsetViewWindow(int

x,int

y,int

width,int

height)圖層顯示:voidpaint(Gr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論