手機(jī)游戲開(kāi)發(fā)_第1頁(yè)
手機(jī)游戲開(kāi)發(fā)_第2頁(yè)
手機(jī)游戲開(kāi)發(fā)_第3頁(yè)
手機(jī)游戲開(kāi)發(fā)_第4頁(yè)
手機(jī)游戲開(kāi)發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩131頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 游戲是策劃、美工和程序三者的協(xié)調(diào)游戲是策劃、美工和程序三者的協(xié)調(diào)及創(chuàng)意和商業(yè)運(yùn)作的平衡。集美術(shù)、音樂(lè)、及創(chuàng)意和商業(yè)運(yùn)作的平衡。集美術(shù)、音樂(lè)、動(dòng)畫(huà)、人工智能等元素于一身。動(dòng)畫(huà)、人工智能等元素于一身。 目前支持目前支持java的手機(jī)性能越來(lái)越強(qiáng)大,的手機(jī)性能越來(lái)越強(qiáng)大,同時(shí),手機(jī)的價(jià)格在不斷地下降,因此,同時(shí),手機(jī)的價(jià)格在不斷地下降,因此,手機(jī)游戲的市場(chǎng)前景將是非常良好的。本手機(jī)游戲的市場(chǎng)前景將是非常良好的。本章將從圖片的處理、動(dòng)畫(huà)的制作和音效的章將從圖片的處理、動(dòng)畫(huà)的制作和音效的實(shí)現(xiàn)來(lái)學(xué)習(xí)手機(jī)游戲開(kāi)發(fā)的基礎(chǔ)知識(shí)。實(shí)現(xiàn)來(lái)學(xué)習(xí)手機(jī)游戲開(kāi)發(fā)的基礎(chǔ)知識(shí)。 手機(jī)游戲開(kāi)發(fā)簡(jiǎn)介手機(jī)游戲開(kāi)發(fā)簡(jiǎn)介7.1 png

2、 png圖像格式介紹圖像格式介紹7.2游戲設(shè)計(jì)中的動(dòng)畫(huà)游戲設(shè)計(jì)中的動(dòng)畫(huà)7.3手機(jī)游戲手機(jī)游戲2d2d動(dòng)畫(huà)開(kāi)發(fā)動(dòng)畫(huà)開(kāi)發(fā)7.4 手機(jī)音效開(kāi)發(fā)手機(jī)音效開(kāi)發(fā)7.5綜合示例:飛機(jī)碰撞綜合示例:飛機(jī)碰撞7.6小結(jié)小結(jié)7.77.1 7.1 手機(jī)游戲開(kāi)發(fā)簡(jiǎn)介手機(jī)游戲開(kāi)發(fā)簡(jiǎn)介 現(xiàn)在的移動(dòng)電話可以看作小型的計(jì)算現(xiàn)在的移動(dòng)電話可以看作小型的計(jì)算機(jī),只是它的處理能力與機(jī),只是它的處理能力與pc相比很有限,相比很有限,但是足夠運(yùn)行一個(gè)小型的游戲。但是足夠運(yùn)行一個(gè)小型的游戲。 另一個(gè)特性就是它們還是網(wǎng)絡(luò)計(jì)算機(jī),另一個(gè)特性就是它們還是網(wǎng)絡(luò)計(jì)算機(jī),能夠高速發(fā)送和接收數(shù)字?jǐn)?shù)據(jù)。能夠高速發(fā)送和接收數(shù)字?jǐn)?shù)據(jù)。 除了語(yǔ)音除了語(yǔ)音數(shù)據(jù)

3、以外,它們還可以發(fā)送和接收其他類數(shù)據(jù)以外,它們還可以發(fā)送和接收其他類型的數(shù)據(jù)。型的數(shù)據(jù)。 所以類似所以類似傳奇?zhèn)髌?、千年千年這樣的這樣的網(wǎng)絡(luò)游戲?qū)?lái)也可以在手機(jī)上實(shí)現(xiàn)。網(wǎng)絡(luò)游戲?qū)?lái)也可以在手機(jī)上實(shí)現(xiàn)。 但是與但是與pc相比,它們的輸入和顯示功相比,它們的輸入和顯示功能也很有限。手機(jī)的屏幕都較小,其對(duì)聲能也很有限。手機(jī)的屏幕都較小,其對(duì)聲音處理能力也很有限。音處理能力也很有限。 開(kāi)發(fā)者在這樣的平臺(tái)上開(kāi)發(fā)應(yīng)用,必開(kāi)發(fā)者在這樣的平臺(tái)上開(kāi)發(fā)應(yīng)用,必須認(rèn)真的考慮這些特點(diǎn)。本節(jié)將重點(diǎn)討論須認(rèn)真的考慮這些特點(diǎn)。本節(jié)將重點(diǎn)討論手機(jī)本身的特點(diǎn)和手機(jī)游戲開(kāi)發(fā)的特點(diǎn)。手機(jī)本身的特點(diǎn)和手機(jī)游戲開(kāi)發(fā)的特點(diǎn)。 7.1.1

4、 7.1.1 手機(jī)游戲的類型手機(jī)游戲的類型 1 1嵌入式游戲嵌入式游戲 2 2短信息服務(wù)游戲短信息服務(wù)游戲 3 3wapwap瀏覽器游戲?yàn)g覽器游戲 圖圖7-1 wap7-1 wap游戲的工作原理圖游戲的工作原理圖 7.1.2 7.1.2 手機(jī)游戲開(kāi)發(fā)特點(diǎn)手機(jī)游戲開(kāi)發(fā)特點(diǎn) 1 1龐大的潛在用戶群龐大的潛在用戶群 2 2便攜性便攜性 3 3屏幕小屏幕小 4 4有限的顏色和聲音支持有限的顏色和聲音支持 5 5應(yīng)用程序大小限制應(yīng)用程序大小限制 6 6高等待時(shí)間高等待時(shí)間 7 7可中斷性是關(guān)鍵可中斷性是關(guān)鍵 7.1.3 7.1.3 揚(yáng)長(zhǎng)避短的手機(jī)游戲揚(yáng)長(zhǎng)避短的手機(jī)游戲開(kāi)發(fā)開(kāi)發(fā) 1 1縮短每回合的游戲時(shí)間

5、縮短每回合的游戲時(shí)間 2 2合理處理等待時(shí)間合理處理等待時(shí)間 7.2 png 7.2 png圖像格式介紹圖像格式介紹 7.2.1 png 7.2.1 png的由來(lái)的由來(lái) png全名全名portable network graphics,字面意思是字面意思是“可移植性網(wǎng)絡(luò)用圖形可移植性網(wǎng)絡(luò)用圖形”,從,從這簡(jiǎn)單幾個(gè)字已經(jīng)明白定義了這簡(jiǎn)單幾個(gè)字已經(jīng)明白定義了png的用途的用途以及主要發(fā)展方向。以及主要發(fā)展方向。 1996年,年,png group向向w3c(world wide web consortium)提出一種多媒體)提出一種多媒體圖形格式,重點(diǎn)在于改進(jìn)現(xiàn)有圖形格式,重點(diǎn)在于改進(jìn)現(xiàn)有jpg跟

6、跟gif的缺點(diǎn),并且提供更多新的概念與壓縮模的缺點(diǎn),并且提供更多新的概念與壓縮模式,在提出后得到式,在提出后得到w3c的認(rèn)可與推薦。的認(rèn)可與推薦。 在在1996年年10月月1號(hào),號(hào),w3c正式發(fā)函公正式發(fā)函公告,推薦告,推薦png為最佳的圖形格式,并且以為最佳的圖形格式,并且以“png delivers higher quality graphics for web page design”的文字作為該文件的的文字作為該文件的標(biāo)頭。標(biāo)頭。 7.2.2 png 7.2.2 png的圖檔格式特性的圖檔格式特性 png保留了大部分保留了大部分gif的特性,的特性, png的壓縮率很高,尤其是圖表型的

7、圖片的壓縮率很高,尤其是圖表型的圖片 7.2.3 png 7.2.3 png格式圖像的壓縮格式圖像的壓縮及處理及處理 png圖像格式文件(或者稱為數(shù)據(jù)流)圖像格式文件(或者稱為數(shù)據(jù)流)由一個(gè)由一個(gè)8字節(jié)的字節(jié)的png文件署名(文件署名(png file signature)域和按照特定結(jié)構(gòu)組織的)域和按照特定結(jié)構(gòu)組織的3個(gè)以個(gè)以上的數(shù)據(jù)塊(上的數(shù)據(jù)塊(chunk)組成。)組成。 png定義了兩種類型的數(shù)據(jù)塊,一種定義了兩種類型的數(shù)據(jù)塊,一種是稱為關(guān)鍵數(shù)據(jù)塊(是稱為關(guān)鍵數(shù)據(jù)塊(critical chunk),這),這是標(biāo)準(zhǔn)的數(shù)據(jù)塊,另一種叫做輔助數(shù)據(jù)塊是標(biāo)準(zhǔn)的數(shù)據(jù)塊,另一種叫做輔助數(shù)據(jù)塊(anc

8、illary chunks),這是可選的數(shù)據(jù)塊。),這是可選的數(shù)據(jù)塊。 7.2.4 7.2.4 使用使用pngpng圖片圖片 在在midp具體實(shí)現(xiàn)中,具體實(shí)現(xiàn)中,images可以是可以是可變的也可以是不可變的。可變的也可以是不可變的。 不可變的不可變的image可以從二進(jìn)制圖像文可以從二進(jìn)制圖像文件創(chuàng)建,如果要用二進(jìn)制圖像數(shù)據(jù)來(lái)創(chuàng)建件創(chuàng)建,如果要用二進(jìn)制圖像數(shù)據(jù)來(lái)創(chuàng)建image,這些數(shù)據(jù)必須是設(shè)備支持的格式。,這些數(shù)據(jù)必須是設(shè)備支持的格式。 有的設(shè)備可能會(huì)支持額外的一些格式,有的設(shè)備可能會(huì)支持額外的一些格式,不過(guò)所有設(shè)備都必須支持不過(guò)所有設(shè)備都必須支持png格式。在手格式。在手機(jī)中使用機(jī)中使用

9、png圖片,必須先把圖片加載到圖片,必須先把圖片加載到內(nèi)存,并且實(shí)例化成為一個(gè)內(nèi)存,并且實(shí)例化成為一個(gè)image對(duì)象。對(duì)象。 image對(duì)象的構(gòu)造方法如下:對(duì)象的構(gòu)造方法如下:public static image createimage(string name) 圖圖7-2 7-2 旋轉(zhuǎn)的旋轉(zhuǎn)的“x”x” 7.2.5 7.2.5 游戲菜單制作游戲菜單制作 當(dāng)玩家在菜單項(xiàng)中選擇了某選項(xiàng)后,當(dāng)玩家在菜單項(xiàng)中選擇了某選項(xiàng)后,系統(tǒng)給玩家返回的界面應(yīng)該不同。系統(tǒng)給玩家返回的界面應(yīng)該不同。 下例菜單選項(xiàng)包括:新游戲、高分榜、下例菜單選項(xiàng)包括:新游戲、高分榜、幫助和退出。其他屏幕包括:游戲中的界幫助和退出

10、。其他屏幕包括:游戲中的界面、查看高分榜的界面、查看幫助的界面。面、查看高分榜的界面、查看幫助的界面。 圖圖7-3 7-3 游戲的菜單界面游戲的菜單界面 7.3 7.3 游戲設(shè)計(jì)中的動(dòng)畫(huà)游戲設(shè)計(jì)中的動(dòng)畫(huà) 7.3.1 7.3.1 動(dòng)畫(huà)基礎(chǔ)動(dòng)畫(huà)基礎(chǔ) 1 1什么是動(dòng)畫(huà)什么是動(dòng)畫(huà) 動(dòng)畫(huà)是通過(guò)連續(xù)播放一系列畫(huà)面,給動(dòng)畫(huà)是通過(guò)連續(xù)播放一系列畫(huà)面,給人的視覺(jué)造成連續(xù)變化的圖畫(huà)。人的視覺(jué)造成連續(xù)變化的圖畫(huà)。 2 2動(dòng)畫(huà)制作應(yīng)注意的問(wèn)題動(dòng)畫(huà)制作應(yīng)注意的問(wèn)題 (1)速度的處理)速度的處理(2)循環(huán)動(dòng)畫(huà))循環(huán)動(dòng)畫(huà)(3)夸張與擬人)夸張與擬人 7.3.2 7.3.2 雙緩沖技術(shù)雙緩沖技術(shù) 雙緩沖技術(shù)是編寫雙緩沖技術(shù)是

11、編寫j2me游戲程序的游戲程序的關(guān)鍵技術(shù)之一。實(shí)際上,雙緩沖技術(shù)是計(jì)關(guān)鍵技術(shù)之一。實(shí)際上,雙緩沖技術(shù)是計(jì)算機(jī)動(dòng)畫(huà)的一項(xiàng)傳統(tǒng)技術(shù)。算機(jī)動(dòng)畫(huà)的一項(xiàng)傳統(tǒng)技術(shù)。 造成屏幕閃爍的主要原因在于,畫(huà)面造成屏幕閃爍的主要原因在于,畫(huà)面在顯示的同時(shí),程序又在改變它。解決辦在顯示的同時(shí),程序又在改變它。解決辦法就是在內(nèi)存中開(kāi)辟一片區(qū)域作為后臺(tái)畫(huà)法就是在內(nèi)存中開(kāi)辟一片區(qū)域作為后臺(tái)畫(huà)面,程序?qū)λ?、修改,完成后再顯示面,程序?qū)λ?、修改,完成后再顯示它。它。 這樣被顯示的圖像永遠(yuǎn)是已經(jīng)完全畫(huà)這樣被顯示的圖像永遠(yuǎn)是已經(jīng)完全畫(huà)好的圖像,程序修改的將不是正在被顯示好的圖像,程序修改的將不是正在被顯示的圖像。當(dāng)然還有其他

12、方法可以解決屏幕的圖像。當(dāng)然還有其他方法可以解決屏幕閃爍問(wèn)題,但使用雙緩沖技術(shù)是一種值得閃爍問(wèn)題,但使用雙緩沖技術(shù)是一種值得推薦的解決方案。推薦的解決方案。 雙緩沖思想體現(xiàn)在程序上就是要依次雙緩沖思想體現(xiàn)在程序上就是要依次完成以下幾步工作。完成以下幾步工作。 (1)定義一個(gè))定義一個(gè)graphics對(duì)象對(duì)象bg和一和一個(gè)個(gè)image對(duì)象對(duì)象buf,按屏幕大小建立一,按屏幕大小建立一個(gè)緩沖對(duì)象附給個(gè)緩沖對(duì)象附給buf,然后取得,然后取得buf的的graphics對(duì)象附給對(duì)象附給bg。 (2)在)在bg(緩沖屏幕)上用(緩沖屏幕)上用drawimage()和和drawstring等語(yǔ)句畫(huà)等語(yǔ)句畫(huà)圖

13、,相當(dāng)于在緩沖屏幕上畫(huà)圖。圖,相當(dāng)于在緩沖屏幕上畫(huà)圖。 (3)調(diào)用)調(diào)用repaint()語(yǔ)句,它的功能語(yǔ)句,它的功能是告知系統(tǒng)調(diào)用是告知系統(tǒng)調(diào)用paint()來(lái)完成真實(shí)屏來(lái)完成真實(shí)屏幕的顯示。幕的顯示。 (4)在)在paint(graphics g)方法里,將方法里,將buf(緩沖屏幕上的圖片)畫(huà)到真實(shí)(緩沖屏幕上的圖片)畫(huà)到真實(shí)屏幕上。屏幕上。 7.3.3 7.3.3 圖片的裁剪圖片的裁剪 我們可以通過(guò)設(shè)定裁剪的區(qū)域來(lái)顯示我們可以通過(guò)設(shè)定裁剪的區(qū)域來(lái)顯示圖片的一個(gè)片斷,使用前面講的方法:圖片的一個(gè)片斷,使用前面講的方法: setclip() getclipx() getclipy() ge

14、tclipwidth() getclipheight() 創(chuàng)建裁剪區(qū)域的步驟如下。創(chuàng)建裁剪區(qū)域的步驟如下。(1)聲明類的引用。)聲明類的引用。(2)創(chuàng)建類的實(shí)例,并賦值給這些)創(chuàng)建類的實(shí)例,并賦值給這些類引用。類引用。(3)當(dāng)程序開(kāi)始時(shí),顯示)當(dāng)程序開(kāi)始時(shí),顯示canvas類類的實(shí)例。的實(shí)例。 (4)當(dāng))當(dāng)exit時(shí),終止時(shí),終止midlet。(5)定義)定義canvas的派生類,并實(shí)現(xiàn)的派生類,并實(shí)現(xiàn)commandlistener。 (6)請(qǐng)求保存圖片所需的足夠內(nèi)存)請(qǐng)求保存圖片所需的足夠內(nèi)存塊。如果使用動(dòng)態(tài)圖像,就創(chuàng)建圖像。塊。如果使用動(dòng)態(tài)圖像,就創(chuàng)建圖像。否則確定圖像包含什么靜態(tài)圖片文件

15、否則確定圖像包含什么靜態(tài)圖片文件名。名。 (7)從)從paint()方法中判斷圖像是否方法中判斷圖像是否創(chuàng)建成功或者圖像是否打開(kāi)成功。如創(chuàng)建成功或者圖像是否打開(kāi)成功。如果是創(chuàng)建一個(gè)新的裁剪區(qū)域,在畫(huà)布果是創(chuàng)建一個(gè)新的裁剪區(qū)域,在畫(huà)布上繪制圖像。上繪制圖像。 7.3.4 7.3.4 播放動(dòng)畫(huà)框架播放動(dòng)畫(huà)框架 開(kāi)發(fā)開(kāi)發(fā)midp的程序員經(jīng)常會(huì)在一個(gè)的程序員經(jīng)常會(huì)在一個(gè)midlet上顯示動(dòng)畫(huà)。上顯示動(dòng)畫(huà)。midp 1.0沒(méi)有直接提沒(méi)有直接提供對(duì)動(dòng)畫(huà)的支持(正在開(kāi)發(fā)中的供對(duì)動(dòng)畫(huà)的支持(正在開(kāi)發(fā)中的midp 2.0支持),但真要是自己去實(shí)現(xiàn),其實(shí)也并支持),但真要是自己去實(shí)現(xiàn),其實(shí)也并非是一件很難的事。非

16、是一件很難的事。 任何動(dòng)畫(huà)的最基本的前提,是要在足任何動(dòng)畫(huà)的最基本的前提,是要在足夠快的時(shí)間內(nèi)顯示和更換一張張的圖片,夠快的時(shí)間內(nèi)顯示和更換一張張的圖片,讓人的眼睛看到動(dòng)的畫(huà)面效果。圖片必須讓人的眼睛看到動(dòng)的畫(huà)面效果。圖片必須按照順序畫(huà)出來(lái)。按照順序畫(huà)出來(lái)。 從一張圖片到下一張圖片之間的變化從一張圖片到下一張圖片之間的變化越小,效果會(huì)越好。首先要做的,是使用越小,效果會(huì)越好。首先要做的,是使用你的圖片處理軟件(比如你的圖片處理軟件(比如photoshop或者或者firework)創(chuàng)建一系列相同大小的圖片來(lái))創(chuàng)建一系列相同大小的圖片來(lái)組成動(dòng)畫(huà)。組成動(dòng)畫(huà)。 每張圖片代表動(dòng)畫(huà)一幀。你需要制作每張圖片

17、代表動(dòng)畫(huà)一幀。你需要制作一定數(shù)量的幀一定數(shù)量的幀越多的幀會(huì)讓你的動(dòng)畫(huà)越多的幀會(huì)讓你的動(dòng)畫(huà)看上去越平滑。制作好的圖片一定要保存看上去越平滑。制作好的圖片一定要保存成成png格式。格式。 有兩個(gè)辦法讓你剛做好的圖片在有兩個(gè)辦法讓你剛做好的圖片在midlet上變成動(dòng)畫(huà)。第一,把圖片都放到上變成動(dòng)畫(huà)。第一,把圖片都放到一個(gè)一個(gè)web服務(wù)器上,讓服務(wù)器上,讓midlet下載他們,下載他們,midp內(nèi)置的內(nèi)置的http支持。支持。 第二個(gè)辦法更簡(jiǎn)單,把圖片用第二個(gè)辦法更簡(jiǎn)單,把圖片用midlet打包成打包成jar文件。如果你使用的是文件。如果你使用的是j2me開(kāi)開(kāi)發(fā)工具,把發(fā)工具,把png文件放到你的項(xiàng)目

18、文件里文件放到你的項(xiàng)目文件里面就可以了。面就可以了。 動(dòng)畫(huà)的過(guò)程其實(shí)更像賬本記錄:顯示動(dòng)畫(huà)的過(guò)程其實(shí)更像賬本記錄:顯示當(dāng)前幀,然后適當(dāng)?shù)馗鼡Q到下一幀。當(dāng)前幀,然后適當(dāng)?shù)馗鼡Q到下一幀。 7.4 7.4 手機(jī)游戲手機(jī)游戲2d2d動(dòng)畫(huà)開(kāi)發(fā)動(dòng)畫(huà)開(kāi)發(fā) 7.4.1 midp 2.0 2d 7.4.1 midp 2.0 2d游戲開(kāi)發(fā)游戲開(kāi)發(fā) midp 2.0相對(duì)于相對(duì)于1.0來(lái)說(shuō),最大的變化來(lái)說(shuō),最大的變化就是新添加了用于支持游戲的就是新添加了用于支持游戲的api,它們,它們被放在被放在javax.microedition.lcdui.game 包中。包中。 游戲游戲api包提供了一系列針對(duì)無(wú)線設(shè)包提供了一

19、系列針對(duì)無(wú)線設(shè)備的游戲開(kāi)發(fā)類。備的游戲開(kāi)發(fā)類。 由于無(wú)線設(shè)備僅有有限的計(jì)算能力,由于無(wú)線設(shè)備僅有有限的計(jì)算能力,因此許多因此許多api的目的在于提高的目的在于提高java游戲的游戲的性能,并且把原來(lái)很多需要手動(dòng)編寫的代性能,并且把原來(lái)很多需要手動(dòng)編寫的代碼如屏幕雙緩沖、圖像剪裁等都交給碼如屏幕雙緩沖、圖像剪裁等都交給api間接調(diào)用本地代碼來(lái)實(shí)現(xiàn)。間接調(diào)用本地代碼來(lái)實(shí)現(xiàn)。 各廠家有相當(dāng)大的自由來(lái)優(yōu)化它們。各廠家有相當(dāng)大的自由來(lái)優(yōu)化它們。游戲游戲api使用了使用了midp的低級(jí)圖形類接口的低級(jí)圖形類接口(graphics,image等)。整個(gè)游戲包僅有等)。整個(gè)游戲包僅有5個(gè)個(gè)class。 1 1

20、gamecanvasgamecanvas 2 2layerlayer 3 3layermanagerlayermanager 4 4spritesprite 5 5tiledlayertiledlayer 7.4.2 gamecanvas 7.4.2 gamecanvas的使用的使用 gamecanvas類提供了基本的游戲用類提供了基本的游戲用戶接口。戶接口。 除了從除了從canvas 繼承下來(lái)的特性(命令,繼承下來(lái)的特性(命令,輸入事件等)以外,它還提供了專門針對(duì)輸入事件等)以外,它還提供了專門針對(duì)游戲的功能,如后備屏幕緩沖和鍵盤狀態(tài)游戲的功能,如后備屏幕緩沖和鍵盤狀態(tài)查詢的能力。每個(gè)查詢的

21、能力。每個(gè)gamecanvas 實(shí)例都會(huì)實(shí)例都會(huì)有一個(gè)唯一的緩沖區(qū)。有一個(gè)唯一的緩沖區(qū)。 1 1繪圖繪圖 2 2鍵盤鍵盤 7.4.3 sprite 7.4.3 sprite的使用的使用 sprite 是一個(gè)基本的可視元素,可以是一個(gè)基本的可視元素,可以用存儲(chǔ)在圖像中的一幀或多幀來(lái)渲染它;用存儲(chǔ)在圖像中的一幀或多幀來(lái)渲染它;輪流顯示不同的幀可以令輪流顯示不同的幀可以令sprite 實(shí)現(xiàn)動(dòng)畫(huà)。實(shí)現(xiàn)動(dòng)畫(huà)。 翻轉(zhuǎn)、旋轉(zhuǎn)等幾種變換方式也能應(yīng)用翻轉(zhuǎn)、旋轉(zhuǎn)等幾種變換方式也能應(yīng)用于于sprite 使其外觀改變。作為使其外觀改變。作為layer 子類,子類,sprite 的位置可以改變,并且還能設(shè)置其的位置可以

22、改變,并且還能設(shè)置其可視與否。可視與否。 1 1sprite sprite 幀幀 用于渲染用于渲染sprite的原始幀由一個(gè)單獨(dú)的原始幀由一個(gè)單獨(dú)的的image對(duì)象提供,此對(duì)象提供,此image可以是可變的,可以是可變的,也可以是不可變的。也可以是不可變的。 圖圖7-4 7-4 幀的分解幀的分解 2 2幀序列幀序列 sprite 的幀序列定義了幀以什么樣的的幀序列定義了幀以什么樣的順序來(lái)顯示。順序來(lái)顯示。 圖圖7-5 7-5 幀的序列幀的序列 special frame sequence 圖圖7-6 7-6 幀的特定序列幀的特定序列 圖圖7-7 7-7 更新顯示更新顯示 3 3referenc

23、e pixelreference pixel 作為作為layer 的一個(gè)子類,的一個(gè)子類,sprite 繼承繼承了很多方法來(lái)設(shè)置和獲取位置,如了很多方法來(lái)設(shè)置和獲取位置,如setposition(x,y),getx()和和gety()。 4 4sprite sprite 的變換的變換 幾種變換可應(yīng)用于幾種變換可應(yīng)用于sprite。可用的變??捎玫淖儞Q包括旋轉(zhuǎn)幾個(gè)換包括旋轉(zhuǎn)幾個(gè)90 度加上鏡像(沿垂直度加上鏡像(沿垂直軸)。軸)。 圖圖7-8 reference pixel7-8 reference pixel 圖圖7-9 7-9 參考像素點(diǎn)被定位在樹(shù)枝末端參考像素點(diǎn)被定位在樹(shù)枝末端 圖圖7-1

24、0 sprite7-10 sprite的變換的變換 圖圖7-11 907-11 90度旋轉(zhuǎn)的變換度旋轉(zhuǎn)的變換 7.4.4 7.4.4 碰撞檢測(cè)碰撞檢測(cè) sprite 非常適合移動(dòng)的物體,如游戲非常適合移動(dòng)的物體,如游戲主角、敵人等,在游戲中,可以使用主角、敵人等,在游戲中,可以使用sprite 提供的碰撞檢測(cè)功能來(lái)簡(jiǎn)化游戲邏提供的碰撞檢測(cè)功能來(lái)簡(jiǎn)化游戲邏輯。輯。 sprite的碰撞檢測(cè)可以分兩種:一種的碰撞檢測(cè)可以分兩種:一種是矩形碰撞檢測(cè),另一種是像素碰撞檢測(cè)。是矩形碰撞檢測(cè),另一種是像素碰撞檢測(cè)。游戲中游戲中sprite的大小往往是用包圍它的矩的大小往往是用包圍它的矩形的大小來(lái)表示的,如在

25、圖形的大小來(lái)表示的,如在圖7-12中的飛機(jī)中的飛機(jī)和導(dǎo)彈并沒(méi)有發(fā)生碰撞但檢查的結(jié)果卻發(fā)和導(dǎo)彈并沒(méi)有發(fā)生碰撞但檢查的結(jié)果卻發(fā)生了碰撞。生了碰撞。 圖圖7-12 7-12 矩形碰撞檢測(cè)矩形碰撞檢測(cè) 對(duì)于像素碰撞檢測(cè),往往把對(duì)于像素碰撞檢測(cè),往往把sprite的的背景色設(shè)置為相同的顏色,碰撞檢查的時(shí)背景色設(shè)置為相同的顏色,碰撞檢查的時(shí)候就只判斷兩個(gè)圖片除背景色以外的其他候就只判斷兩個(gè)圖片除背景色以外的其他像素是否發(fā)生了重疊。像素是否發(fā)生了重疊。 像素碰撞檢測(cè)比較精確,但計(jì)算復(fù)雜,像素碰撞檢測(cè)比較精確,但計(jì)算復(fù)雜,一般沒(méi)有特殊要求都使用矩形碰撞檢測(cè)。一般沒(méi)有特殊要求都使用矩形碰撞檢測(cè)。下面的例子兩個(gè)矩

26、形發(fā)生了碰撞但飛機(jī)和下面的例子兩個(gè)矩形發(fā)生了碰撞但飛機(jī)和導(dǎo)彈并沒(méi)有發(fā)生碰撞,如圖導(dǎo)彈并沒(méi)有發(fā)生碰撞,如圖7-13所示。所示。 圖圖7-13 7-13 像素碰撞檢測(cè)像素碰撞檢測(cè) 要判斷兩個(gè)要判斷兩個(gè)sprite 是否碰撞,或者與是否碰撞,或者與其他其他layer 是否碰撞,可以使用是否碰撞,可以使用collideswith()方法。方法。collideswith()共有三共有三種形式:種形式: (1)public final boolean collideswith(sprite s,boolean pixellevel) (2)public final boolean collideswith

27、(titledlayer t,boolean pixellevel) (3)public final boolean collideswith(image image,int x,int y,boolean pixellevel) 7.4.5 layer 7.4.5 layer的使用的使用 layer 是一個(gè)抽象類,表示游戲中的是一個(gè)抽象類,表示游戲中的一個(gè)可視元素。一個(gè)可視元素。 1 1tiledlayertiledlayer tiledlayer 由一系列單元格組成,單由一系列單元格組成,單元格可被一組貼圖填充。元格可被一組貼圖填充。 圖圖7-14 tiledlayer7-14 tiled

28、layer 每個(gè)貼圖都被賦予一個(gè)唯一的索引號(hào)。每個(gè)貼圖都被賦予一個(gè)唯一的索引號(hào)。 除了靜態(tài)貼圖外,開(kāi)發(fā)者同樣能夠定義一除了靜態(tài)貼圖外,開(kāi)發(fā)者同樣能夠定義一系列動(dòng)態(tài)貼圖(系列動(dòng)態(tài)貼圖(animated tiles)。)。 動(dòng)態(tài)貼圖允許開(kāi)發(fā)者能非常容易地改動(dòng)態(tài)貼圖允許開(kāi)發(fā)者能非常容易地改變一組單元格的外觀。變一組單元格的外觀。 圖圖7-15 tiledlayer7-15 tiledlayer背景背景 圖圖7-16 tiledlayer7-16 tiledlayer動(dòng)態(tài)貼圖動(dòng)態(tài)貼圖 2 2layermanagerlayermanager layermanager管理一系列的管理一系列的layer。

29、可視窗口(可視窗口(view window)控制著可視)控制著可視區(qū)域及其在區(qū)域及其在layermanager 的坐標(biāo)系統(tǒng)中的坐標(biāo)系統(tǒng)中的位置。的位置。 圖圖7-17 7-17 相對(duì)原點(diǎn)相對(duì)原點(diǎn) paint(graphics, int, int)方法包含一個(gè)方法包含一個(gè)(x,y)坐標(biāo),控制可視窗口在屏幕中的顯示坐標(biāo),控制可視窗口在屏幕中的顯示位置。位置。 圖圖7-18 7-18 控制可視窗口顯示位置控制可視窗口顯示位置 為了添加一個(gè)為了添加一個(gè)layer,使用,使用append()方方法向這個(gè)法向這個(gè)layermanager 添加一個(gè)添加一個(gè)layer。 7.5 7.5 手機(jī)音效開(kāi)發(fā)手機(jī)音效開(kāi)

30、發(fā) 現(xiàn)在能播放音樂(lè)的手機(jī)已經(jīng)是很常見(jiàn)現(xiàn)在能播放音樂(lè)的手機(jī)已經(jīng)是很常見(jiàn)的了,同時(shí)手機(jī)游戲也需要聲音來(lái)增加動(dòng)的了,同時(shí)手機(jī)游戲也需要聲音來(lái)增加動(dòng)感效果,所以手機(jī)音效也成為了開(kāi)發(fā)熱點(diǎn)。感效果,所以手機(jī)音效也成為了開(kāi)發(fā)熱點(diǎn)。 j2me針對(duì)多種媒體格式,提供了一針對(duì)多種媒體格式,提供了一套播放接口,那就是:套播放接口,那就是:mmapi(mobile media api)。)。 7.5.1 mmapi 7.5.1 mmapi體系結(jié)構(gòu)體系結(jié)構(gòu) 現(xiàn)在多媒體的格式很多,要順利地播現(xiàn)在多媒體的格式很多,要順利地播放這些不同格式的音樂(lè),一種比較好的方放這些不同格式的音樂(lè),一種比較好的方式就是把這些不同格式的數(shù)據(jù)都

31、轉(zhuǎn)換為統(tǒng)式就是把這些不同格式的數(shù)據(jù)都轉(zhuǎn)換為統(tǒng)一的格式,然后統(tǒng)一使用一個(gè)播放器接口一的格式,然后統(tǒng)一使用一個(gè)播放器接口類來(lái)播放。類來(lái)播放。 在在mmapi中,首先從數(shù)據(jù)源(如一個(gè)中,首先從數(shù)據(jù)源(如一個(gè)文件、一個(gè)捕獲裝置或一個(gè)流式服務(wù))上文件、一個(gè)捕獲裝置或一個(gè)流式服務(wù))上讀取媒體數(shù)據(jù)內(nèi)容后,然后傳輸給專門的讀取媒體數(shù)據(jù)內(nèi)容后,然后傳輸給專門的處理程序進(jìn)行處理。處理程序進(jìn)行處理。 處理過(guò)程主要是由處理過(guò)程主要是由datasource類和類和player類完成。類完成。datasource類的作用就是類的作用就是讀取和轉(zhuǎn)換多媒體數(shù)據(jù),讀取和轉(zhuǎn)換多媒體數(shù)據(jù),player類的作用類的作用就是播放這類數(shù)

32、據(jù)。就是播放這類數(shù)據(jù)。 然后提供一系列的播放、暫停、停止然后提供一系列的播放、暫停、停止等播放器相關(guān)功能,等播放器相關(guān)功能,datasource類和類和player類的工作過(guò)程如圖類的工作過(guò)程如圖7-19所示。所示。 圖圖7-19 7-19 數(shù)據(jù)流圖數(shù)據(jù)流圖 7.5.2 player 7.5.2 player接口接口 要使用要使用mmapi進(jìn)行音效開(kāi)發(fā),首先進(jìn)行音效開(kāi)發(fā),首先需要導(dǎo)入相關(guān)的開(kāi)發(fā)包,例如:需要導(dǎo)入相關(guān)的開(kāi)發(fā)包,例如: import javax.microedition.media.* 創(chuàng)建一個(gè)創(chuàng)建一個(gè)player對(duì)象有對(duì)象有3種不同的方式,種不同的方式,也就是用也就是用manag

33、er類的不同構(gòu)造方法,類的不同構(gòu)造方法,manager類一共有三個(gè)構(gòu)造方。類一共有三個(gè)構(gòu)造方。 (1)public static player createplayer (java.lang.string locator) throws java.io.ioexception, mediaexception (2)public static player createplayer (datasource source) throws java.io.ioexception, mediaexception (3) public static player createplayer (java.

34、io.inputstream stream, java. lang.string trpe) throws java.io.ioexception, mediaexception 這三個(gè)方法分別可以讀取指定路徑的這三個(gè)方法分別可以讀取指定路徑的數(shù)據(jù)源或者數(shù)據(jù)源或者datasource和和inpurstream類型類型的數(shù)據(jù)源,分別返回一個(gè)的數(shù)據(jù)源,分別返回一個(gè)player,當(dāng)一個(gè),當(dāng)一個(gè)player對(duì)象被創(chuàng)建以后,使用對(duì)象被創(chuàng)建以后,使用player接口的接口的start()方法就會(huì)盡可能快地啟動(dòng)數(shù)據(jù)的播方法就會(huì)盡可能快地啟動(dòng)數(shù)據(jù)的播放,當(dāng)數(shù)據(jù)播放完畢以后,放,當(dāng)數(shù)據(jù)播放完畢以后,player

35、會(huì)自動(dòng)會(huì)自動(dòng)關(guān)閉。關(guān)閉。 1 1unrealized unrealized 狀態(tài)狀態(tài) 2 2realizedrealized狀態(tài)狀態(tài) 3 3prefetchedprefetched狀態(tài)狀態(tài) 4 4startedstarted狀態(tài)狀態(tài) 5 5closedclosed狀態(tài)狀態(tài) 圖圖7-20 7-20 狀態(tài)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖 7.5.3 7.5.3 播放簡(jiǎn)單音調(diào)播放簡(jiǎn)單音調(diào) 聲音的高低叫音調(diào),也就是音符的頻聲音的高低叫音調(diào),也就是音符的頻率,率,j2me提供了對(duì)簡(jiǎn)單音調(diào)播放的支持,提供了對(duì)簡(jiǎn)單音調(diào)播放的支持,mmapi提供了一個(gè)提供了一個(gè)manager.playtone()方方法來(lái)播放音調(diào)。法來(lái)播放音

36、調(diào)。 使用使用manager.playtone(),需要指定三,需要指定三個(gè)參數(shù):音符、播放時(shí)間和聲音的大小。個(gè)參數(shù):音符、播放時(shí)間和聲音的大小。例如下面的代碼播放了一個(gè)例如下面的代碼播放了一個(gè)c4的音調(diào),的音調(diào),c4音調(diào)是由音調(diào)是由tonecontrol類的常量類的常量c4指定的。指定的。 7.5.4 7.5.4 播放歌曲播放歌曲 使用使用mmapi播放歌曲很簡(jiǎn)單,主要是播放歌曲很簡(jiǎn)單,主要是用用player的的createplayer構(gòu)造方法,只要指構(gòu)造方法,只要指定網(wǎng)絡(luò)地址,定網(wǎng)絡(luò)地址,player就會(huì)自動(dòng)的下載歌曲就會(huì)自動(dòng)的下載歌曲并播放,具體構(gòu)造方法如下。并播放,具體構(gòu)造方法如下。

37、public static player createplayer(string locator)throws ioexception,mediaexception 為了很好地控制歌曲的播放狀態(tài),需為了很好地控制歌曲的播放狀態(tài),需要要midlet程序?qū)崿F(xiàn)一個(gè)程序?qū)崿F(xiàn)一個(gè)playerlistener接口,接口,同時(shí)實(shí)現(xiàn)該接口中的同時(shí)實(shí)現(xiàn)該接口中的playerupdate()方法。方法。 public void playerupdate(player player,string event,object eventdate) 在在playerupdate方法里可以判斷播放方法里可以判斷播放的狀態(tài),

38、例如判斷播放是否結(jié)束可以用的狀態(tài),例如判斷播放是否結(jié)束可以用playerlistener.end_of_media進(jìn)行判斷。進(jìn)行判斷。 public void playerupdate(player player,string event,object eventdate) if(event = playerlistener.end_of_media) 為了提高播放效率,又不影響其他程為了提高播放效率,又不影響其他程序的運(yùn)行,可以使用線程,只要實(shí)現(xiàn)序的運(yùn)行,可以使用線程,只要實(shí)現(xiàn)runnable接口即可。接口即可。 如果想在播放過(guò)程中,對(duì)播放進(jìn)行暫如果想在播放過(guò)程中,對(duì)播放進(jìn)行暫停或者停止等操

39、作,都要對(duì)播放器的各種?;蛘咄V沟炔僮?,都要對(duì)播放器的各種狀態(tài)進(jìn)行判斷,狀態(tài)進(jìn)行判斷, 圖圖7-21 7-21 播放網(wǎng)絡(luò)資源播放網(wǎng)絡(luò)資源 7.5.5 7.5.5 控制音量控制音量 音量的控制可以使用音量的控制可以使用volumecontrol控控件接口,它允許設(shè)置音量的變化范圍是從件接口,它允許設(shè)置音量的變化范圍是從0100,其中,其中0表示靜音。表示靜音。 volumecontrol控件接口的使用很簡(jiǎn)單,控件接口的使用很簡(jiǎn)單,使用使用getlevel()方法得到當(dāng)前的音量級(jí)別,方法得到當(dāng)前的音量級(jí)別,也可以使用也可以使用setlevel()方法設(shè)置音量級(jí)別,方法設(shè)置音量級(jí)別,靜音使用靜音使用setmute()方法來(lái)設(shè)置,要判斷是方法來(lái)設(shè)置,要判斷是否靜音可以使用否靜音可以使用ismute()方法。方法。 具體獲得一個(gè)具體獲得一個(gè)volumecontrol控件的代控件的代碼如下:碼如下:volumecontrol volume = (volumecontrol) player

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論