![Android游戲開(kāi)發(fā)教程_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/10/0257712c-bf59-4d16-a14d-56dea23446db/0257712c-bf59-4d16-a14d-56dea23446db1.gif)
![Android游戲開(kāi)發(fā)教程_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/10/0257712c-bf59-4d16-a14d-56dea23446db/0257712c-bf59-4d16-a14d-56dea23446db2.gif)
![Android游戲開(kāi)發(fā)教程_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/10/0257712c-bf59-4d16-a14d-56dea23446db/0257712c-bf59-4d16-a14d-56dea23446db3.gif)
![Android游戲開(kāi)發(fā)教程_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/10/0257712c-bf59-4d16-a14d-56dea23446db/0257712c-bf59-4d16-a14d-56dea23446db4.gif)
![Android游戲開(kāi)發(fā)教程_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2021-12/10/0257712c-bf59-4d16-a14d-56dea23446db/0257712c-bf59-4d16-a14d-56dea23446db5.gif)
版權(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 平臺(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文檔化并提 供示例代碼供使用。其中有
2、個(gè)叫做 API Demos的示例幾乎展示了所有 API的功能。 如果你熟悉 Java并且用過(guò) Eclipse ,要讓你的第一個(gè)應(yīng)用 跑起來(lái)那是相當(dāng)簡(jiǎn)單。 如果你以前從沒(méi)寫過(guò)代碼, 在你前進(jìn)路上還要 學(xué)習(xí)很多,但別氣餒。獲取SDK新手上路的第一步便是獲取 Android SD(K 軟件開(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,它里面包
3、括簽名和部署你的應(yīng)用 程序的一些工具。學(xué)習(xí)應(yīng)用程序架構(gòu)別急著一頭扎進(jìn)開(kāi)發(fā)的海洋里,理解 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)管理
4、。你的 activity 創(chuàng) 建、恢復(fù)、暫停、銷毀都受操作系統(tǒng)的支配。正確處理這些事件是很 重要的,這樣應(yīng)用程序才能表現(xiàn)良好,做用戶認(rèn)為正確的事。在你設(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ō),這解決了一些資源管理
5、的問(wèn)題,應(yīng)予以考慮。主循環(huán)根據(jù)你寫的游戲的類型,你可能需要也可能不需要一個(gè)主循環(huán)。 如果你的游戲不依賴于時(shí)間或者它僅僅對(duì)用戶所做的加以回應(yīng), 并且 不做任何視覺(jué)上的改變, 永遠(yuǎn)等待著用戶的輸入, 那么你就不需要主 循環(huán)。如果你寫的是動(dòng)作類游戲或者帶有動(dòng)畫、 定時(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í)行的順
6、序通常如下:狀態(tài),輸入,人工智能, 物理,動(dòng)畫,聲音,錄像。更新?tīng)顟B(tài)意思是管理狀態(tài)轉(zhuǎn)換, 例如游戲的結(jié)束、 人物的選擇或 下一個(gè)級(jí)別。 很多時(shí)候你需要在某個(gè)狀態(tài)上等上幾秒鐘, 而狀態(tài)管理 應(yīng)該處理這種延遲,并且在時(shí)間過(guò)了之后設(shè)置成下一個(gè)狀態(tài)。輸入是指用戶按下的任何鍵、對(duì)于滾動(dòng)條的移動(dòng)或者用戶的觸 摸。在處理物理之前處理這些是很重要的, 因?yàn)楹芏鄷r(shí)候輸入會(huì)影響 到物理層,因而首先處理輸入將會(huì)使游戲的反應(yīng)更加良好。 在Android 里,輸入事件從主用戶界面線程而來(lái), 因此你必須寫代碼將輸入放入 緩沖區(qū),這樣你的主循環(huán)可以在需要的時(shí)刻就從緩沖區(qū)里取到它。 這 并非難事。首先為下一個(gè)用戶輸入定義一個(gè)
7、域, 然后將 onKeyPressed 或 onTouchEvent函數(shù)設(shè)為接到一個(gè)用戶動(dòng)作就放到那個(gè)域里, 有這兩 步就夠了。如果對(duì)于給定游戲的狀態(tài),這是一個(gè)合法的輸入操作,那 么所有輸入需要在那一刻做的更新操作都已經(jīng)定下來(lái)了, 剩下來(lái)就讓 物理去關(guān)心怎樣響應(yīng)輸入吧。人工智能所做的類似于用戶在決定下一個(gè)要“按”哪個(gè)按鈕。 學(xué) 習(xí)怎樣寫人工智能程序超出了這篇文章的范圍, 但大體的意思是人工 智能會(huì)按照用戶的意圖來(lái)按按鈕。這些也有待物理去處理和響應(yīng)吧。物理可能是也可能不是真正的物理。 對(duì)于動(dòng)作類游戲來(lái)說(shuō), 關(guān)鍵 點(diǎn)是要考慮到上一次更新的時(shí)間、 正在更新的當(dāng)前時(shí)間、 用戶輸入以 及人工智能, 并且
8、決定它們朝著什么方向發(fā)展和是否會(huì)發(fā)生沖突。 對(duì) 于一個(gè)你可視化地抓取一些部件并滑動(dòng)它們的游戲來(lái)說(shuō), 物理就是這 個(gè)游戲中滑動(dòng)部件或者使之放入合適的位置的部分。 對(duì)于一個(gè)小游戲 來(lái)說(shuō),物理即使這個(gè)游戲中決定答案是錯(cuò)還是對(duì)的部分。 你可能將其 命名為其他東西, 但每個(gè)游戲都有一個(gè)作為游戲引擎的紅肉部分 (譯 者注:可能是主體部分的意思) ,在這篇文章里,我把這部分稱為物 理。動(dòng)畫并非像在游戲里放入會(huì)動(dòng)的 gif 圖片那樣簡(jiǎn)單。你需要使得 游戲能在恰當(dāng)?shù)臅r(shí)間畫出每一幀。 這并沒(méi)有聽(tīng)起來(lái)那么困難。 保留一 些像 isDancing 、 danceFrame和lastDanceFrameTime那樣的狀
9、態(tài)域, 那樣動(dòng)畫更新便能決定是否可以切換到下一幀去了。 動(dòng)畫更新真正做 的事就那么多。真正來(lái)顯示動(dòng)畫的變化是由錄像更新來(lái)處理的。聲音更新要處理觸發(fā)聲音、停止聲音、音量變化以及音調(diào)變化。 正常情況下當(dāng)寫游戲的時(shí)候, 聲音更新會(huì)產(chǎn)生一些傳往聲音緩沖區(qū)的 字節(jié)流,但是 Android 能夠管理自己的聲音,因而你的選擇將是使用 SoundPool或者 MediaPlayer 。它們都需要小心處理以免出錯(cuò), 但你要 知道,因?yàn)橐恍┑讓訉?shí)現(xiàn)細(xì)節(jié),小型、低比特率的聲音文件將帶來(lái)最 佳的性能和穩(wěn)定性。錄像更新要考慮游戲的狀態(tài)、角色的位置、分?jǐn)?shù)、狀態(tài)等等,并 將一切畫到屏幕上。 如果使用主循環(huán), 你可能需要使用
10、 SurfaceView , 并做一個(gè)“推”繪制。對(duì)于其他視圖,視圖本身能夠調(diào)用繪制操作, 主循環(huán)不必處理。 SurfaceView 每秒產(chǎn)生的幀數(shù)最多,最適合于一些 有動(dòng)畫或屏幕上有運(yùn)動(dòng)部件的游戲。 錄像更新所要做的工作是獲取游6 / 11戲的狀態(tài), 并及時(shí)地為這個(gè)狀態(tài)繪制圖像。 其他的自動(dòng)化操作最好由 不同的更新任務(wù)來(lái)處理。代碼看起來(lái)是什么樣的?這兒有個(gè)例子1: public void run() 2: while (isRunning) 3: while (isPaused && isRunning) 4: sleep(100);5: 6: update();7: 10:
11、 private void update() 11: updateState();12: updateInput();13: updateAI();14: updatePhysics();15: updateAnimations();16: updateSound();17: updateVideo();18: 3D還是2D?在開(kāi)始寫游戲之前, 你要決定是做 3D的還是 2D的。2D游戲有一個(gè) 低得多的學(xué)習(xí)曲線, 一般更容易獲得良好的性能。 3D游戲需要更深入 的數(shù)學(xué)技能, 并且如果你不在意的話會(huì)有性能問(wèn)題產(chǎn)生。 如果你打算 畫比方框和圓圈更復(fù)雜的圖形,還需要會(huì)使用 3D Studio 和 M
12、aya那樣 的建模工具。 Android 支持 OpenGL用來(lái)3D編程,并且在 OpenGL方面有 很多很好的教程可供學(xué)習(xí)。建立簡(jiǎn)單、高質(zhì)量的方法上手時(shí), 要確保你整個(gè)游戲不要就用一個(gè)龐大而冗長(zhǎng)的方法。 如 果你遵循我上面描述的主循環(huán)模式, 這將相當(dāng)簡(jiǎn)單。 每個(gè)你寫的方法 應(yīng)當(dāng)完成一個(gè)非常特定的任務(wù), 并且它就應(yīng)該無(wú)差錯(cuò)地那樣做。 舉例 來(lái)說(shuō),如果你需要洗一副紙牌, 你應(yīng)該寫一個(gè)“ shuffleCards ”的方 法,并且該方法就應(yīng)該只做這一件事。這是一個(gè)適用于任何軟件開(kāi)發(fā)的編碼實(shí)踐, 但對(duì)于游戲開(kāi)發(fā)來(lái)說(shuō) 這尤為重要。在一個(gè)有狀態(tài)的、 實(shí)時(shí)的系統(tǒng)里,調(diào)試將變得非常困難。 使你的方法盡量的小
13、, 一般的經(jīng)驗(yàn)法則是每個(gè)方法有且僅有一個(gè)目的 (譯者注:完成且僅完成一個(gè)功能) 。如果你要為一個(gè)場(chǎng)景用編程方 式畫一個(gè)背景, 你可能需要一個(gè)叫做“ drawBackground”的方法。 諸 如此類的任務(wù)能夠很快完成, 因而你可以按照搭積木的方法來(lái)開(kāi)發(fā)你 的游戲,而你能夠繼續(xù)添加你要的功能, 并且不會(huì)使得這一切難以理 解。最重要的是效率!性能是任何游戲的主要問(wèn)題。 我們的目標(biāo)是使得游戲的反應(yīng)越快 越好,看起來(lái)越流暢越好。某些方法如 Canvas.drawLine 比較慢。并 且要將屏幕大小的位圖畫到主畫布上, 每一幀都是代價(jià)昂貴的。 如何 權(quán)衡對(duì)于達(dá)到最佳性能很有必要。 確保管理好你的資源,
14、使用技巧來(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)化把所有東西都畫出來(lái)這種方法, 否則幀率將會(huì)大大地降 低。我只在視圖初始化的時(shí)候把背景畫進(jìn)一個(gè)位圖里一次。 路徑放在 它們自己的位圖里, 隨著車手的前進(jìn)而更新。 這兩個(gè)位圖在每一幀里 都被畫進(jìn)
15、主畫布中去,車手畫在頂端,到最后會(huì)有一個(gè)爆炸。這種技 術(shù)使得游戲運(yùn)行在一個(gè)可以玩的程度。如果適用的話,使得你的位圖的大小精確等于你打算畫到屏幕上 的大小,這也是個(gè)好的實(shí)踐。 這么做了以后就需要縮放, 可以節(jié)省 CPU 資源。在游戲中始終一致的位圖配置(如 RGBA888)8。這將會(huì)通過(guò)減少 不同格式之間轉(zhuǎn)換的時(shí)間來(lái)節(jié)省圖形庫(kù)的 CPU時(shí)間。如果你決定開(kāi)發(fā) 3D游戲但沒(méi)有 3D方面的知識(shí),你需要挑選一兩本 3D游戲編程方面的書并學(xué)習(xí)線性代數(shù)。你最少要理解點(diǎn)積、叉積、向 量、單元向量、法線、矩陣和變換。 這方面我遇到的最好的書是叫 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個(gè)人房屋租賃的合同(2篇)
- 2025年個(gè)人房屋買賣協(xié)議參考模板(2篇)
- 2025年二手房轉(zhuǎn)讓房產(chǎn)協(xié)議范文(2篇)
- 2025年五年級(jí)上班隊(duì)工作總結(jié)(二篇)
- 2025年主要農(nóng)作物新品種展示示范協(xié)議(6篇)
- 大型機(jī)械拆卸運(yùn)輸合同
- 兒童樂(lè)園對(duì)公裝修合同
- 鐵路熱熔標(biāo)線施工方案
- 賓館改造瓦工單包合同
- 化妝品快遞配送合同范本
- 耳穴療法治療失眠
- 行政區(qū)域代碼表Excel
- 少兒財(cái)商教育少兒篇
- GB 1886.114-2015食品安全國(guó)家標(biāo)準(zhǔn)食品添加劑紫膠(又名蟲膠)
- 初二上冊(cè)期末數(shù)學(xué)試卷含答案
- envi二次開(kāi)發(fā)素材包-idl培訓(xùn)
- 2022年上海市初中語(yǔ)文課程終結(jié)性評(píng)價(jià)指南
- 西門子starter軟件簡(jiǎn)易使用手冊(cè)
- 隧道施工監(jiān)控量測(cè)方案及措施
- 桂花-作文ppt-PPT課件(共14張)
- 配電房日常檢查記錄表.docx
評(píng)論
0/150
提交評(píng)論