![IT培訓(xùn)](/zhuzhan/220824/image/index/logo.png)
For investors
股價:
5.36 美元 %For investors
股價:
5.36 美元 %認(rèn)真做教育 專心促就業(yè)
如何從android開發(fā)轉(zhuǎn)行android游戲開發(fā)?有Android開發(fā)基礎(chǔ)轉(zhuǎn)游戲開發(fā)的話也會有優(yōu)勢,推薦你可以先看一些官方的相關(guān)文檔和別人做好的項目源碼,推薦個網(wǎng)站DevStore主要是真多移動開發(fā)者的,有很多第三方服務(wù)的評測包和配置過程,其中游戲類的也不少,你可以在配置過程和開發(fā)者分享的評測包下載下來學(xué)習(xí)一下,游戲開放平臺相關(guān)資料。
任何技術(shù)性的工作,如果想要學(xué)好肯定是很難的。Android平臺的開發(fā)語言主要為Java,如果想要學(xué)習(xí)安卓平臺的開發(fā)又沒有任何基礎(chǔ),建議先從自學(xué)Java編程入手吧,學(xué)會標(biāo)準(zhǔn)編程后再進(jìn)行相關(guān)平臺的SDK開發(fā)。如果覺得自學(xué)Java時的難度可以接受再報一下專業(yè)的培訓(xùn)班,避免不必要的損失。
Android是一個基于Java的環(huán)境。這對初學(xué)者來說是個好消息,因為相對于C++,Java被廣泛認(rèn)為是一門更容易上手的語言,它是移動開發(fā)的規(guī)范。Google也做了一件出色的工作,它將API文檔化并提供示例代碼供使用。其中有個叫做API Demos的示例幾乎展示了所有API的功能。如果你熟悉Java并且用過Eclipse,要讓你的第一個應(yīng)用跑起來那是相當(dāng)簡單。如果你以前從沒寫過代碼,在你前進(jìn)路上還要學(xué)習(xí)很多,但別氣餒。這里先介紹下“Android游戲開發(fā)入門基礎(chǔ)”。
準(zhǔn)備好Android SDK
新手上路的第一步便是獲取Android SDK(軟件開發(fā)工具包)。SDK里有一個核心類庫,一個模擬器,一些工具和示例代碼。我強烈建議使用Eclipse和Android Eclipse插件。如果你玩Android的話,Eclipse IDE對Java開發(fā)者來說很好用。如果這是你第一次開發(fā)Java項目,你可能會需要下載全套JDK,它里面包括簽名和部署你的應(yīng)用程序的一些工具。
理解Android應(yīng)用程序架構(gòu)
別急著一頭扎進(jìn)開發(fā)的海洋里,理解Android應(yīng)用程序架構(gòu)是很重要的。如果你不學(xué)一下,你設(shè)計出來的游戲在線下將很難調(diào)試。你將需要理解 Applications、Activities、Intents以及它們怎樣相互聯(lián)系。Google提供了很多有用的架構(gòu)信息。真正重要的是要理解為什么你的游戲需要多于一個的Activity,以及什么才是設(shè)計一個有良好用戶體驗的游戲。要理解這些,首先要了解什么是Activity生命周期。
掌握Activity生命周期
Activity 生命周期由Android操作系統(tǒng)來管理。你的activity創(chuàng)建、恢復(fù)、暫停、銷毀都受操作系統(tǒng)的支配。正確處理這些事件是很重要的,這樣應(yīng)用程序才能表現(xiàn)良好,做用戶認(rèn)為正確的事。在你設(shè)計你的游戲之前了解所有這些是如何工作的是件好事,因為以后你可以為自己節(jié)省調(diào)試時間和昂貴的重新設(shè)計時間。對大多數(shù)應(yīng)用來說,默認(rèn)的設(shè)置將工作正常,但對于游戲,你可能需要考慮將SingleInstance標(biāo)志打開。當(dāng)設(shè)置為默認(rèn)時,Android在它認(rèn)為合適時會創(chuàng)建activity的新實例。對于游戲來說,你可能只需要一個游戲activity的實例。這對于你要怎樣管理事務(wù)的狀態(tài)有些影響,但對于我來說,這解決了一些資源管理的問題,應(yīng)予以考慮。
游戲主循環(huán)
根據(jù)你寫的游戲的類型,你可能需要也可能不需要一個主循環(huán)。如果你的游戲不依賴于時間或者它僅僅對用戶所做的加以回應(yīng),并且不做任何視覺上的改變,永遠(yuǎn)等待著用戶的輸入,那么你就不需要主循環(huán)。如果你寫的是動作類游戲或者帶有動畫、定時器或任何自動操作的游戲,你應(yīng)該認(rèn)真考慮下使用主循環(huán)。
游戲的主循環(huán)以一個特定的順序通常盡可能多的在每秒鐘內(nèi)“滴答”提醒子系統(tǒng)運行。你的主循環(huán)需要在它自己的線程里運行,原因是Android有一個主用戶界面線程,如果你不運行自己的線程,用戶界面線程將會被你的游戲所阻塞,這會導(dǎo)致Android操作系統(tǒng)無法正常的更新任務(wù)。執(zhí)行的順序通常如下:狀態(tài),輸入,人工智能,物理,動畫,聲音,錄像。
更新狀態(tài)意思是管理狀態(tài)轉(zhuǎn)換,例如游戲的結(jié)束、人物的選擇或下一個級別。很多時候你需要在某個狀態(tài)上等上幾秒鐘,而狀態(tài)管理應(yīng)該處理這種延遲,并且在時間過了之后設(shè)置成下一個狀態(tài)。
輸入是指用戶按下的任何鍵、對于滾動條的移動或者用戶的觸摸。在處理物理之前處理這些是很重要的,因為很多時候輸入會影響到物理層,因而首先處理輸入將會使游戲的反應(yīng)更加良好。在Android里,輸入事件從主用戶界面線程而來,因此你必須寫代碼將輸入放入緩沖區(qū),這樣你的主循環(huán)可以在需要的時刻就從緩沖區(qū)里取到它。這并非難事。首先為下一個用戶輸入定義一個域,然后將onKeyPressed或onTouchEvent函數(shù)設(shè)為接到一個用戶動作就放到那個域里,有這兩步就夠了。如果對于給定游戲的狀態(tài),這是一個合法的輸入操作,那么所有輸入需要在那一刻做的更新操作都已經(jīng)定下來了,剩下來就讓物理去關(guān)心怎樣響應(yīng)輸入吧。
人工智能所做的類似于用戶在決定下一個要“按”哪個按鈕。學(xué)習(xí)怎樣寫人工智能程序超出了這篇文章的范圍,但大體的意思是人工智能會按照用戶的意圖來按按鈕。這些也有待物理去處理和響應(yīng)吧。
物理可能是也可能不是真正的物理。對于動作類游戲來說,關(guān)鍵點是要考慮到上一次更新的時間、正在更新的當(dāng)前時間、用戶輸入以及人工智能,并且決定它們朝著什么方向發(fā)展和是否會發(fā)生沖突。對于一個你可視化地抓取一些部件并滑動它們的游戲來說,物理就是這個游戲中滑動部件或者使之放入合適的位置的部分。對于一個小游戲來說,物理即使這個游戲中決定答案是錯還是對的部分。你可能將其命名為其他東西,但每個游戲都有一個作為游戲引擎的紅肉部分(譯者注:可能是主體部分的意思),在這篇文章里,我把這部分稱為物理。
動畫并非像在游戲里放入會動的gif圖片那樣簡單。你需要使得游戲能在恰當(dāng)?shù)臅r間畫出每一幀。這并沒有聽起來那么困難。保留一些像isDancing、 danceFrame和lastDanceFrameTime那樣的狀態(tài)域,那樣動畫更新便能決定是否可以切換到下一幀去了。動畫更新真正做的事就那么多。真正來顯示動畫的變化是由錄像更新來處理的。
聲音更新要處理觸發(fā)聲音、停止聲音、音量變化以及音調(diào)變化。正常情況下當(dāng)寫游戲的時候,聲音更新會產(chǎn)生一些傳往聲音緩沖區(qū)的字節(jié)流,但是Android能夠管理自己的聲音,因而你的選擇將是使用SoundPool或者M(jìn)ediaPlayer。它們都需要小心處理以免出錯,但你要知道,因為一些底層實現(xiàn)細(xì)節(jié),小型、低比特率的聲音文件將帶來最佳的性能和穩(wěn)定性。
錄像更新要考慮游戲的狀態(tài)、角色的位置、分?jǐn)?shù)、狀態(tài)等等,并將一切畫到屏幕上。如果使用主循環(huán),你可能需要使用SurfaceView,并做一個“推”繪制。對于其他視圖,視圖本身能夠調(diào)用繪制操作,主循環(huán)不必處理。SurfaceView每秒產(chǎn)生的幀數(shù)最多,最適合于一些有動畫或屏幕上有運動部件的游戲。錄像更新所要做的工作是獲取游戲的狀態(tài),并及時地為這個狀態(tài)繪制圖像。其他的自動化操作最好由不同的更新任務(wù)來處理。
3D還是2D?
在開始寫游戲之前,你要決定是做3D的還是2D的。2D游戲有一個低得多的學(xué)習(xí)曲線,一般更容易獲得良好的性能。3D游戲需要更深入的數(shù)學(xué)技能,并且如果你不在意的話會有性能問題產(chǎn)生。如果你打算畫比方框和圓圈更復(fù)雜的圖形,還需要會使用3D Studio和Maya那樣的建模工具。Android支持OpenGL用來3D編程,并且在OpenGL方面有很多很好的教程可供學(xué)習(xí)。
建立簡單、高質(zhì)量的方法
上手時,要確保你整個游戲不要就用一個龐大而冗長的方法。如果你遵循我上面描述的主循環(huán)模式,這將相當(dāng)簡單。每個你寫的方法應(yīng)當(dāng)完成一個非常特定的任務(wù),并且它就應(yīng)該無差錯地那樣做。舉例來說,如果你需要洗一副紙牌,你應(yīng)該寫一個“shuffleCards”的方法,并且該方法就應(yīng)該只做這一件事。
這是一個適用于任何軟件開發(fā)的編碼實踐,但對于游戲開發(fā)來說這尤為重要。在一個有狀態(tài)的、實時的系統(tǒng)里,調(diào)試將變得非常困難。使你的方法盡量的小,一般的經(jīng)驗法則是每個方法有且僅有一個目的(譯者注:完成且僅完成一個功能)。如果你要為一個場景用編程方式畫一個背景,你可能需要一個叫做 “drawBackground”的方法。諸如此類的任務(wù)能夠很快完成,因而你可以按照搭積木的方法來開發(fā)你的游戲,而你能夠繼續(xù)添加你要的功能,并且不會使得這一切難以理解。
效率最重要!
性能是任何游戲的主要問題。我們的目標(biāo)是使得游戲的反應(yīng)越快越好,看起來越流暢越好。某些方法如Canvas.drawLine比較慢。并且要將屏幕大小的位圖畫到主畫布上,每一幀都是代價昂貴的。如何權(quán)衡對于達(dá)到最佳性能很有必要。確保管理好你的資源,使用技巧來以最少量的CPU資源完成你的任務(wù)。如果性能不好的話,即使是最好的游戲玩起來也沒勁。人們一般對于游戲卡或者響應(yīng)慢幾乎難以容忍。
提示和技巧
看一下SDK中的示例LunarLander。它使用SurfaceView,這對于一個每秒需要處理最多幀的游戲來說是合適的。如果你要做3D,示例中有GLView可以處理3D顯示的很多初始化工作。對LightRacer來說,我不得不優(yōu)化把所有東西都畫出來這種方法,否則幀率將會大大地降低。我只在視圖初始化的時候把背景畫進(jìn)一個位圖里一次。路徑放在它們自己的位圖里,隨著車手的前進(jìn)而更新。這兩個位圖在每一幀里都被畫進(jìn)主畫布中去,車手畫在頂端,到最后會有一個爆炸。這種技術(shù)使得游戲運行在一個可以玩的程度。
如果適用的話,使得你的位圖的大小精確等于你打算畫到屏幕上的大小,這也是個好的實踐。這么做了以后就需要縮放,可以節(jié)省CPU資源。
如何從android開發(fā)轉(zhuǎn)行android游戲開發(fā)?想要開始Android游戲開發(fā)學(xué)習(xí)的朋友是不是已經(jīng)知道需要學(xué)習(xí)哪些基礎(chǔ)知識了?開發(fā)Android游戲的思路和重點也漸漸明確了吧?那就趕快加入Android游戲開發(fā)隊伍吧。
【免責(zé)聲明】本文部分系轉(zhuǎn)載,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé)。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與聯(lián)系我們,我們會予以更改或刪除相關(guān)文章,以保證您的權(quán)益!