版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Android游戲開(kāi)發(fā)Android游戲開(kāi)發(fā)教程如果你有興趣為Android平臺(tái)開(kāi)發(fā)游戲,有很多你需要了解的東西。如果你有過(guò)游戲開(kāi)發(fā)經(jīng)驗(yàn),那么轉(zhuǎn)移到移動(dòng)平臺(tái)上來(lái)將不是特別困難。你主要只需學(xué)習(xí)其架構(gòu)以及API就行了。如果你是一名游戲開(kāi)發(fā)新手,我總結(jié)了一張列表,上面有你必需知道的東西,供你起步用。這些知識(shí)適用于很多類型的游戲,包括動(dòng)作類、策略類、模擬類和益智類。Android是一個(gè)基于Java的環(huán)境。這對(duì)初學(xué)者來(lái)說(shuō)是個(gè)好消息,因?yàn)橄鄬?duì)于C+,Java被廣泛認(rèn)為是一門更容易上手的語(yǔ)言,它是移動(dòng)開(kāi)發(fā)的規(guī)范。Google也做了一件出色的工作,它將API文檔化并提供示例代碼供使用。其中有個(gè)叫做API De
2、mos的示例幾乎展示了所有API的功能。如果你熟悉Java并且用過(guò)Eclipse,要讓你的第一個(gè)應(yīng)用跑起來(lái)那是相當(dāng)簡(jiǎn)單。如果你以前從沒(méi)寫(xiě)過(guò)代碼,在你前進(jìn)路上還要學(xué)習(xí)很多,但別氣餒。獲取SDK新手上路的第一步便是獲取Android SDK(軟件開(kāi)發(fā)工具包)。SDK里有一個(gè)核心類庫(kù),一個(gè)模擬器,一些工具和示例代碼。我強(qiáng)烈建議使用Eclipse和Android Eclipse插件。如果你玩Android的話,Eclipse IDE對(duì)Java開(kāi)發(fā)者來(lái)說(shuō)很好用。如果這是你第一次開(kāi)發(fā)Java項(xiàng)目,你可能會(huì)需要下載全套JDK,它里面包括簽名和部署你的應(yīng)用程序的一些工具。學(xué)習(xí)應(yīng)用程序架構(gòu)別急著一頭扎進(jìn)開(kāi)發(fā)的海
3、洋里,理解Android應(yīng)用程序架構(gòu)是很重要的。如果你不學(xué)一下,你設(shè)計(jì)出來(lái)的游戲在線下將很難調(diào)試。你將需要理解Applications、Activities、Intents以及它們?cè)鯓酉嗷ヂ?lián)系。Google提供了很多有用的架構(gòu)信息。真正重要的是要理解為什么你的游戲需要多于一個(gè)的Activity,以及什么才是設(shè)計(jì)一個(gè)有良好用戶體驗(yàn)的游戲。要理解這些,首先要了解什么是Activity生命周期。學(xué)習(xí)Activity生命周期Activity生命周期由Android操作系統(tǒng)來(lái)管理。你的activity創(chuàng)建、恢復(fù)、暫停、銷毀都受操作系統(tǒng)的支配。正確處理這些事件是很重要的,這樣應(yīng)用程序才能表現(xiàn)良好,做用戶認(rèn)
4、為正確的事。在你設(shè)計(jì)你的游戲之前了解所有這些是如何工作的是件好事,因?yàn)橐院竽憧梢詾樽约汗?jié)省調(diào)試時(shí)間和昂貴的重新設(shè)計(jì)時(shí)間。對(duì)大多數(shù)應(yīng)用來(lái)說(shuō),默認(rèn)的設(shè)置將工作正常,但對(duì)于游戲,你可能需要考慮將SingleInstance標(biāo)志打開(kāi)。當(dāng)設(shè)置為默認(rèn)時(shí),Android在它認(rèn)為合適時(shí)會(huì)創(chuàng)建activity的新實(shí)例。對(duì)于游戲來(lái)說(shuō),你可能只需要一個(gè)游戲activity的實(shí)例。這對(duì)于你要怎樣管理事務(wù)的狀態(tài)有些影響,但對(duì)于我來(lái)說(shuō),這解決了一些資源管理的問(wèn)題,應(yīng)予以考慮。主循環(huán)根據(jù)你寫(xiě)的游戲的類型,你可能需要也可能不需要一個(gè)主循環(huán)。如果你的游戲不依賴于時(shí)間或者它僅僅對(duì)用戶所做的加以回應(yīng),并且不做任何視覺(jué)上的改變,永遠(yuǎn)
5、等待著用戶的輸入,那么你就不需要主循環(huán)。如果你寫(xiě)的是動(dòng)作類游戲或者帶有動(dòng)畫(huà)、定時(shí)器或任何自動(dòng)操作的游戲,你應(yīng)該認(rèn)真考慮下使用主循環(huán)。游戲的主循環(huán)以一個(gè)特定的順序通常盡可能多的在每秒鐘內(nèi)“滴答”提醒子系統(tǒng)運(yùn)行。你的主循環(huán)需要在它自己的線程里運(yùn)行,原因是Android有一個(gè)主用戶界面線程,如果你不運(yùn)行自己的線程,用戶界面線程將會(huì)被你的游戲所阻塞,這會(huì)導(dǎo)致Android操作系統(tǒng)無(wú)法正常的更新任務(wù)。執(zhí)行的順序通常如下:狀態(tài),輸入,人工智能,物理,動(dòng)畫(huà),聲音,錄像。更新?tīng)顟B(tài)意思是管理狀態(tài)轉(zhuǎn)換,例如游戲的結(jié)束、人物的選擇或下一個(gè)級(jí)別。很多時(shí)候你需要在某個(gè)狀態(tài)上等上幾秒鐘,而狀態(tài)管理應(yīng)該處理這種延遲,并且在
6、時(shí)間過(guò)了之后設(shè)置成下一個(gè)狀態(tài)。輸入是指用戶按下的任何鍵、對(duì)于滾動(dòng)條的移動(dòng)或者用戶的觸摸。在處理物理之前處理這些是很重要的,因?yàn)楹芏鄷r(shí)候輸入會(huì)影響到物理層,因而首先處理輸入將會(huì)使游戲的反應(yīng)更加良好。在Android里,輸入事件從主用戶界面線程而來(lái),因此你必須寫(xiě)代碼將輸入放入緩沖區(qū),這樣你的主循環(huán)可以在需要的時(shí)刻就從緩沖區(qū)里取到它。這并非難事。首先為下一個(gè)用戶輸入定義一個(gè)域,然后將onKeyPressed或onTouchEvent函數(shù)設(shè)為接到一個(gè)用戶動(dòng)作就放到那個(gè)域里,有這兩步就夠了。如果對(duì)于給定游戲的狀態(tài),這是一個(gè)合法的輸入操作,那么所有輸入需要在那一刻做的更新操作都已經(jīng)定下來(lái)了,剩下來(lái)就讓物理
7、去關(guān)心怎樣響應(yīng)輸入吧。人工智能所做的類似于用戶在決定下一個(gè)要“按”哪個(gè)按鈕。學(xué)習(xí)怎樣寫(xiě)人工智能程序超出了這篇文章的范圍,但大體的意思是人工智能會(huì)按照用戶的意圖來(lái)按按鈕。這些也有待物理去處理和響應(yīng)吧。物理可能是也可能不是真正的物理。對(duì)于動(dòng)作類游戲來(lái)說(shuō),關(guān)鍵點(diǎn)是要考慮到上一次更新的時(shí)間、正在更新的當(dāng)前時(shí)間、用戶輸入以及人工智能,并且決定它們朝著什么方向發(fā)展和是否會(huì)發(fā)生沖突。對(duì)于一個(gè)你可視化地抓取一些部件并滑動(dòng)它們的游戲來(lái)說(shuō),物理就是這個(gè)游戲中滑動(dòng)部件或者使之放入合適的位置的部分。對(duì)于一個(gè)小游戲來(lái)說(shuō),物理即使這個(gè)游戲中決定答案是錯(cuò)還是對(duì)的部分。你可能將其命名為其他東西,但每個(gè)游戲都有一個(gè)作為游戲引擎
8、的紅肉部分(譯者注:可能是主體部分的意思),在這篇文章里,我把這部分稱為物理。動(dòng)畫(huà)并非像在游戲里放入會(huì)動(dòng)的gif圖片那樣簡(jiǎn)單。你需要使得游戲能在恰當(dāng)?shù)臅r(shí)間畫(huà)出每一幀。這并沒(méi)有聽(tīng)起來(lái)那么困難。保留一些像isDancing、danceFrame和lastDanceFrameTime那樣的狀態(tài)域,那樣動(dòng)畫(huà)更新便能決定是否可以切換到下一幀去了。動(dòng)畫(huà)更新真正做的事就那么多。真正來(lái)顯示動(dòng)畫(huà)的變化是由錄像更新來(lái)處理的。聲音更新要處理觸發(fā)聲音、停止聲音、音量變化以及音調(diào)變化。正常情況下當(dāng)寫(xiě)游戲的時(shí)候,聲音更新會(huì)產(chǎn)生一些傳往聲音緩沖區(qū)的字節(jié)流,但是Android能夠管理自己的聲音,因而你的選擇將是使用Sound
9、Pool或者M(jìn)ediaPlayer。它們都需要小心處理以免出錯(cuò),但你要知道,因?yàn)橐恍┑讓訉?shí)現(xiàn)細(xì)節(jié),小型、低比特率的聲音文件將帶來(lái)最佳的性能和穩(wěn)定性。錄像更新要考慮游戲的狀態(tài)、角色的位置、分?jǐn)?shù)、狀態(tài)等等,并將一切畫(huà)到屏幕上。如果使用主循環(huán),你可能需要使用SurfaceView,并做一個(gè)“推”繪制。對(duì)于其他視圖,視圖本身能夠調(diào)用繪制操作,主循環(huán)不必處理。SurfaceView每秒產(chǎn)生的幀數(shù)最多,最適合于一些有動(dòng)畫(huà)或屏幕上有運(yùn)動(dòng)部件的游戲。錄像更新所要做的工作是獲取游戲的狀態(tài),并及時(shí)地為這個(gè)狀態(tài)繪制圖像。其他的自動(dòng)化操作最好由不同的更新任務(wù)來(lái)處理。代碼看起來(lái)是什么樣的?這兒有個(gè)例子。1: publi
10、c void run() 2: while (isRunning) 3: while (isPaused && isRunning) 4: sleep(100);5: 6: update();7: 8: 9:10: private void update() 11: updateState();12: updateInput();13: updateAI();14: updatePhysics();15: updateAnimations();16: updateSound();17: updateVideo();18: 3D還是2D?在開(kāi)始寫(xiě)游戲之前,你要決定是做3D的還是2
11、D的。2D游戲有一個(gè)低得多的學(xué)習(xí)曲線,一般更容易獲得良好的性能。3D游戲需要更深入的數(shù)學(xué)技能,并且如果你不在意的話會(huì)有性能問(wèn)題產(chǎn)生。如果你打算畫(huà)比方框和圓圈更復(fù)雜的圖形,還需要會(huì)使用3D Studio和Maya那樣的建模工具。Android支持OpenGL用來(lái)3D編程,并且在OpenGL方面有很多很好的教程可供學(xué)習(xí)。建立簡(jiǎn)單、高質(zhì)量的方法上手時(shí),要確保你整個(gè)游戲不要就用一個(gè)龐大而冗長(zhǎng)的方法。如果你遵循我上面描述的主循環(huán)模式,這將相當(dāng)簡(jiǎn)單。每個(gè)你寫(xiě)的方法應(yīng)當(dāng)完成一個(gè)非常特定的任務(wù),并且它就應(yīng)該無(wú)差錯(cuò)地那樣做。舉例來(lái)說(shuō),如果你需要洗一副紙牌,你應(yīng)該寫(xiě)一個(gè)“shuffleCards”的方法,并且該方
12、法就應(yīng)該只做這一件事。這是一個(gè)適用于任何軟件開(kāi)發(fā)的編碼實(shí)踐,但對(duì)于游戲開(kāi)發(fā)來(lái)說(shuō)這尤為重要。在一個(gè)有狀態(tài)的、實(shí)時(shí)的系統(tǒng)里,調(diào)試將變得非常困難。使你的方法盡量的小,一般的經(jīng)驗(yàn)法則是每個(gè)方法有且僅有一個(gè)目的(譯者注:完成且僅完成一個(gè)功能)。如果你要為一個(gè)場(chǎng)景用編程方式畫(huà)一個(gè)背景,你可能需要一個(gè)叫做“drawBackground”的方法。諸如此類的任務(wù)能夠很快完成,因而你可以按照搭積木的方法來(lái)開(kāi)發(fā)你的游戲,而你能夠繼續(xù)添加你要的功能,并且不會(huì)使得這一切難以理解。最重要的是效率!性能是任何游戲的主要問(wèn)題。我們的目標(biāo)是使得游戲的反應(yīng)越快越好,看起來(lái)越流暢越好。某些方法如Canvas.drawLine比較慢
13、。并且要將屏幕大小的位圖畫(huà)到主畫(huà)布上,每一幀都是代價(jià)昂貴的。如何權(quán)衡對(duì)于達(dá)到最佳性能很有必要。確保管理好你的資源,使用技巧來(lái)以最少量的CPU資源完成你的任務(wù)。如果性能不好的話,即使是最好的游戲玩起來(lái)也沒(méi)勁。人們一般對(duì)于游戲卡或者響應(yīng)慢幾乎難以容忍。提示和技巧看一下SDK中的示例LunarLander。它使用SurfaceView,這對(duì)于一個(gè)每秒需要處理最多幀的游戲來(lái)說(shuō)是合適的。如果你要做3D,示例中有GLView可以處理3D顯示的很多初始化工作。對(duì)LightRacer來(lái)說(shuō),我不得不優(yōu)化把所有東西都畫(huà)出來(lái)這種方法,否則幀率將會(huì)大大地降低。我只在視圖初始化的時(shí)候把背景畫(huà)進(jìn)一個(gè)位圖里一次。路徑放在它
14、們自己的位圖里,隨著車手的前進(jìn)而更新。這兩個(gè)位圖在每一幀里都被畫(huà)進(jìn)主畫(huà)布中去,車手畫(huà)在頂端,到最后會(huì)有一個(gè)爆炸。這種技術(shù)使得游戲運(yùn)行在一個(gè)可以玩的程度。如果適用的話,使得你的位圖的大小精確等于你打算畫(huà)到屏幕上的大小,這也是個(gè)好的實(shí)踐。這么做了以后就需要縮放,可以節(jié)省CPU資源。在游戲中始終一致的位圖配置(如RGBA8888)。這將會(huì)通過(guò)減少不同格式之間轉(zhuǎn)換的時(shí)間來(lái)節(jié)省圖形庫(kù)的CPU時(shí)間。如果你決定開(kāi)發(fā)3D游戲但沒(méi)有3D方面的知識(shí),你需要挑選一兩本3D游戲編程方面的書(shū)并學(xué)習(xí)線性代數(shù)。你最少要理解點(diǎn)積、叉積、向量、單元向量、法線、矩陣和變換。這方面我遇到的最好的書(shū)是叫3D游戲編程和計(jì)算機(jī)圖形學(xué)數(shù)學(xué)。聲音文件要小而且低比特率。需要加載的越少,加載速度越快,游戲所需內(nèi)存越少。聲音使用OGG文件,圖片使用PNG文件。確保釋放所有媒體播放器,當(dāng)Activity銷毀時(shí)空出所
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 伴侶情感溝通計(jì)劃協(xié)議書(shū)
- 倉(cāng)儲(chǔ)物流合作協(xié)議書(shū)范本
- 企業(yè)員工短期租車協(xié)議書(shū)
- 產(chǎn)學(xué)研合作技術(shù)合同
- 會(huì)計(jì)審計(jì)公司勞動(dòng)合同模板
- 臨時(shí)工合同轉(zhuǎn)讓范本
- 傳感器模塊配件ODM協(xié)議書(shū)
- 代持購(gòu)房協(xié)議
- 倉(cāng)儲(chǔ)服務(wù)勞動(dòng)合同社保注意事項(xiàng)
- 個(gè)人電力建設(shè)貸款還款合同
- 4-6歲數(shù)學(xué)思維能力診斷測(cè)試題
- 肉牛屠宰公司組織機(jī)構(gòu)加各個(gè)崗位職責(zé)
- 3角的初步認(rèn)識(shí)(課件) 數(shù)學(xué)二年級(jí)上冊(cè) (共14張PPT)人教版
- 鋼絲繩的安全載重表
- 中小學(xué)智慧校園建設(shè)標(biāo)準(zhǔn)及評(píng)價(jià)指標(biāo)體系
- 延髓背外側(cè)綜合征
- 樣品承認(rèn)流程(共4頁(yè))
- 金蝶kis專業(yè)版操作手冊(cè)V20
- 房地產(chǎn)估價(jià)公司估價(jià)質(zhì)量管理制度
- 煙氣焓計(jì)算復(fù)習(xí)課程
- 井下安全閥簡(jiǎn)介
評(píng)論
0/150
提交評(píng)論