編輯:Android游戲開發
隨著智能手機的發展,許多游戲也不斷的在手機中出現、更新,比如先前比較火的植物大戰僵屍,憤怒的小鳥等等。游戲的本質就是在屏幕上不斷地顯示和更新圖片,只不過不是胡亂地更新,而是根據程序邏輯來控制。一款完整的游戲需要多方面的知識,比如游戲的創意、背景、故事情節、游戲音效,游戲風格、游戲類型、運行速度、適配機型等。而且,游戲的開發需要策劃、美工、程序、測試的協同工作和默契配合完成的。
初學android小游戲開發會用到的一些基礎
如果你對開發Android平台游戲感興趣,那麼你需要了解很多東西。如果你有些許開發經驗,想要以開發跨平台游戲或表現出色的Android小游戲。那麼你就要學習學習下面一品威客提供的一些知識了。
學習應用程序架構
理解Android應用程序架構也是件非常重要的事情。如果你不學習這個方面的內容,可能會使游戲完成後問題的修改變得很困難。你需要理解應用程序、活動、意圖以及它們之間的相互聯系。Google在架構方面已經提供了許多有價值的信息。真正重要的是,要理解游戲為什麼需要包含不止一個活動以及這對設計良好用戶體驗的意義。我們接下來要探討的就是活動生命周期。
獲得SDK
開發Android平台的首個步驟是獲得Android SDK(游戲邦注:即軟件開發工具包)。SDK包含核心庫、模擬器、工具和代碼范例。我強烈推薦使用Eclipse和Android Eclipse插件。如果你只面向Android平台,那麼專門供Java Developers使用的Eclipse IDE是個很好的工具。如果這是你的首個Java開發項目,你可以下載整個Java SE Development Kit(游戲邦注:簡稱“JDK”),因為它包含你需要用於應用認證和部署的工具。
學習活動生命周期
活動生命周期由Android操作系統管理。你的活動將根據操作系統的指令創建、回訪、暫停和摧毀。正確處理這些事件對構建有著良好行為的應用程序非常重要,這樣應用才能正確地滿足用戶的意圖。在你開始設計游戲之前,有必要先知道所有這些內容的運轉方式,這會減少你將來調試和重新設計的時間。對於多數應用程序來說,使用默認設置就可以了。但是對游戲來說,你可能需要考慮打開SingleInstance功能。當處在默認設置下時,Android會在合適的時候自動創建新活動實例。對於游戲來說,你可能只想要單個游戲活動實例。這也等於提示你需要如何來管理內容狀態,但是對我來說,它解決了某些資源管理問題,所以應當考慮入列。
主循環
是否擁有主循環取決於你編寫的游戲類型。如果你的游戲與時間無關,或者如果游戲只會對用戶的行為做出反應,沒有用戶輸入視覺場景就不會發生改變,那麼你或許不需要主循環。如果你編寫的是動作游戲或帶有動畫、計時器或其他自動運轉內容的游戲,那麼你應當認真考慮使用主循環。
游戲的主循環指以特定順序運轉子系統,通常會盡可能提升每秒主循環的次數。你的主循環需要在它自己的線程上運行。原因在於,Android有個主UI線程,如果主循環不在自己的線程上運行,那麼UI線程就會受游戲影響,導致Android OS無法完成普通的更新任務。執行順序通常是:狀態、輸入、AI、物理、動畫、音效和視頻。
更新狀態意味著管理狀態改變,比如游戲結束、角色選擇或下個關卡。通常情況下,你需要在一個狀態上等待數秒鐘時間,狀態管理的任務應當是處理這個延遲並設置時間過後的下個狀態。
輸入是指來自用戶的任意按鍵、滾動或觸碰。在處理物理前完成這個方面的內容是很重要的,因為輸入往往會影響到物理效果,所以先處理輸入會讓游戲顯得更為靈敏。在Android應用中,輸入事件來自於主UI線程,所以你必須通過代碼來緩沖輸入,這樣你的主循環才能適時將其捕獲。這並不是個很困難的任務。所有需要做的就是為下次用戶輸入確定區域,用onKeyPressed或onTouchEvent將下次用戶動作設置到該區域中。在特定游戲狀態下,所有的有效輸入都需要進行輸入更新,讓物理端處理針對該輸入的響應問題。
AI更新類似於用戶決定接下來要“按”的按鍵。學習如何編寫AI不是這篇文章的主題,但基本想法是,AI將像用戶那樣按動按鍵。這也將被物理更新捕捉並做出響應。
物理更新可能是真正的物理,也可能不是。對於動作游戲而言,要點在於同時考慮上次更新時間、此次更新時間、用戶輸入和AI輸入,決定游戲中所有內容的位置以及是否有碰撞發生。對於你可以看到對象抓取和滑動的游戲,物理更新還需要處理對象的互動或者讓它下落到指定的位置。對於問答游戲,它還需要決定答案是否正確。或許你使用的是其他的名稱,但是每款游戲的游戲引擎中都需要有處理上述內容的部分,在這篇文章中我將其稱為“物理”。
動畫並不只是在游戲中加入gif這麼簡單。你需要讓游戲在恰當的時候播放每幀動畫。但是,它也不像聽起來那麼難。要保持isDancing、danceFrame和lastDanceFrameTime等狀態區域允許動畫更新以決定是否轉向下一幀。這就是動畫更新所做的所有工作。真正負責呈現動畫改變的是視頻更新。
音效更新負責觸發音效、暫停音效、改變音量和音調。通常在編寫游戲時,音效更新會生成一連串字節傳輸給音效緩沖器,但是Android自行管理音效,所以針對游戲開發,你可以使用SoundPool或MediaPlayer。它們都有一點敏感,但是要知道,由於存在某些低層次的執行細節,小而低位速率的OGG也能產生最棒的運行表現和穩定性。
視頻更新要考慮游戲狀態、玩家位置、分數和狀況等內容,在屏幕繪制所有內容。如果使用主循環,那麼你可以考慮使用SurfaceView,進行“推送”繪制。如果使用其他視圖,視圖本身能夠調用繪制運轉,這樣主循環就無需負責這項工作。SurfaceView能夠提供最高的每秒幀數,最適合帶有動畫或在屏幕上有移動物體的游戲。視頻更新應該做的工作是,獲取游戲狀態,並及時繪制在屏幕上。除此之外,其他的自動化內容最好由其他更新任務來完成。
3D還是2D?
在你開始開發游戲前,你需要決定是制作3D還是2D游戲。2D游戲要學習的內容較少,通常更容易獲得良好的表現。3D游戲需要更多的深層次數學技能,如果不注意的話,可能會產生表現問題。如果你想要添加比方形和圓圈更加復雜的形狀,那麼無論選擇3D或2D,都需要使用3D Studio和Maya等模型工具。Android支持使用OpenGL進行3D編程,網絡上有許多很不錯的OpenGL教程可供閱讀。
構建簡單且高質量方法
開發開始時,確保不要編寫又大又長的方法。如果你采用我在上文中描述的主循環樣式,這樣得出的方法應當較為簡單。你編寫的每個方法都應當能夠完成某項特定任務,而且不可發生錯誤。比如,如果你需要在游戲中洗牌,那麼就應當編寫名為“shuffleCards”的方法,而且這個方法就是用來完成洗牌這個動作。
這是個可用於所有軟件開發的編程方法,但是在游戲開發中顯得特別重要。在狀態化的即時系統中,調試會變得非常困難。要保持方法簡單輕巧,最好是保證每個方法只有1個目標。如果你需要為場景繪制背景,那麼你可能需要名為“drawBackground”的方法。這樣會讓你的游戲開發變得像搭建方塊一般,你可以隨時根據自己的需要添加新方塊,同時不會讓代碼變得難以理解。
學習應用程序架構
理解Android應用程序架構也是件非常重要的事情。如果你不學習這個方面的內容,可能會使游戲完成後問題的修改變得很困難。你需要理解應用程序、活動、意圖以及它們之間的相互聯系。Google在架構方面已經提供了許多有價值的信息。真正重要的是,要理解游戲為什麼需要包含不止一個活動以及這對設計良好用戶體驗的意義。我們接下來要探討的就是活動生命周期。
效能是關鍵
運行效果是所有游戲遇到的主要問題。我們的目標是讓游戲的反應速度盡可能快,游戲的運行看起來盡可能流暢。Canvas.drawLine等某些方法可能執行較慢。而且,在每幀的主畫布上繪制全屏位圖也會耗費大量時間。要讓應用實現最好的表現,平衡這些動作就成了必要之舉。確保對資源進行良好的管理,使用各種技巧,實現用最少的CPU完成任務。如果表現不好,即便是最棒的游戲也顯得乏味無趣。通常情況下,人們不會對反應緩慢的應用抱有好感。
總的來說,發布更新和錯誤修復是開發者們的另一塊重要的工作,特別是獨立的開發者。有些android小游戲開發一旦完成就鮮有更新,除非有重大的錯誤修復。而其它游戲,特別是那些比較重量級以及社交成分較多的游戲,則會在更新上花費較多精力,這時獨立開發者們也發現用戶們的反饋是很寶貴的資源。
上文TiledMap中的角色和角色移動說到繪制了Map,然後我們的主角也可以四處活動了,但是仍有一些不完善的地方。1.地圖的邊界沒有控制。Camera的
TWL是一個基於OpenGL的圖形化用戶界面庫,它提供了一套非常豐富的窗口小部件,比如標簽,編輯框
大家在玩游戲的時候應該有時候會發現在切換游戲場景的時候 界面會播放一段非常好看的動畫 比如一個百葉
第6天:第一批外星人和屏幕方向 好了,現在有了一些復古風格的外星人它們正在到處飛。抱歉,暫時還沒有demo。這款Andriod游戲目前只有.apk