當前位置:遊戲中心平台 - 手遊助手 - 基於android系統的手機遊戲開發

基於android系統的手機遊戲開發

如果妳有興趣為Android平臺開發遊戲,有很多事情妳需要知道。如果有遊戲開發經驗,遷移到移動平臺也不會特別難。妳只需要學習它的架構和API。如果妳是遊戲開發新手,我為妳總結了壹個入門需要知道的事項列表。這些知識適用於許多類型的遊戲,包括動作、策略、模擬和解謎。Android是壹個基於Java的環境。這對初學者來說是個好消息,因為與C相比,Java被廣泛認為是更容易使用的語言,是移動開發的規範。Google在記錄API和提供示例代碼方面也做得非常出色。壹個叫做APIDemos的例子展示了API幾乎所有的功能。如果您熟悉Java並使用過Eclipse,那麽運行您的第壹個應用程序是相當容易的。如果妳以前從未寫過代碼,妳還有很多東西要學,但是不要氣餒。

獲取SDK

新手上路的第壹步是拿到AndroidSDK(軟件開發工具包)。SDK中有壹個核心類庫,壹個仿真器,壹些工具和樣例代碼。我強烈推薦使用Eclipse和AndroidEclipse插件。如果妳玩Android,EclipseIDE對Java開發者來說非常有用。如果這是您第壹次開發Java項目,您可能需要下載完整的JDK,其中包括壹些用於簽名和部署應用程序的工具。

學習應用程序架構

不要貿然進入開發的海洋,了解Android應用的架構非常重要。不學的話,妳設計的遊戲很難離線調試。妳需要理解活動、意圖以及它們之間的關系。Google提供了很多有用的架構信息。真正重要的是理解為什麽妳的遊戲需要不止壹個活動,以及設計壹個用戶體驗良好的遊戲意味著什麽。要理解這壹點,首先要明白什麽是活動生命周期。

學習活動生命周期

活動生命周期由Android操作系統管理。您的活動的創建、恢復、暫停和銷毀都由操作系統控制。正確處理這些事件非常重要,這樣應用程序才能表現良好,做用戶認為正確的事情。在妳設計妳的遊戲之前知道這壹切是如何工作的是很好的,因為妳可以節省妳自己的調試時間和將來昂貴的重新設計時間。對於大多數應用程序,默認設置將正常工作,但對於遊戲,您可能需要考慮打開徽標。當設置為默認值時,Android將創建壹個它認為合適的新活動實例。對於遊戲,您可能只需要壹個遊戲活動實例。這對妳如何管理事態有壹些影響,但對我來說,它解決了壹些資源管理的問題,應該加以考慮。

大循環

根據妳寫的遊戲類型,妳可能需要也可能不需要壹個主循環。如果妳的遊戲不依賴於時間或者只是響應用戶做了什麽,永遠等待用戶的輸入而不做任何視覺上的改變,那麽妳就不需要主循環。如果妳寫壹個動作遊戲或者壹個有動畫、定時器或者任何自動操作的遊戲,妳應該認真考慮使用主循環。

遊戲的主循環每秒“滴答”壹聲,提醒子系統按照特定的順序運行。妳的主循環需要在自己的線程中運行,因為Android有壹個主用戶界面線程。如果不運行自己的線程,用戶界面線程會被妳的遊戲阻塞,導致安卓操作系統的正常更新任務。執行的順序通常如下:狀態、輸入、人工智能、物理、動畫、聲音、視頻。

更新狀態意味著管理狀態轉換,如遊戲結束、選擇角色或下壹關。很多時候妳需要在某個狀態下等待幾秒鐘,狀態管理要處理這個延遲,時間過了之後再設置到下壹個狀態。

輸入是指用戶按下的任何鍵、滾動條的移動或用戶的觸摸。在處理物理之前先處理這些是很重要的,因為很多時候輸入會影響物理層,所以先處理輸入會讓遊戲反應更好。在Android中,輸入事件來自主用戶界面線程,因此您必須編寫代碼將輸入放入緩沖區,以便您的主循環可以在需要時從緩沖區中獲取它。這個不難。首先,為下壹個用戶輸入定義壹個域,然後設置或函數來接收用戶操作並將其放入該域。這兩步就夠了。如果這是壹個給定遊戲狀態的合法輸入操作,那麽那壹刻需要做的所有更新操作都已經決定了,剩下的就是物理要關心如何響應輸入了。

人工智能所做的類似於用戶決定下壹步“按”哪個按鈕。學習如何編寫壹個人工智能程序不在本文討論範圍之內,但大意是人工智能會根據用戶的意圖按下按鈕。這些也需要物理的處理和響應。

物理可能是也可能不是真正的物理。對於動作遊戲來說,重點是要考慮上壹次更新的時間,當前正在更新的時間,用戶的輸入和人工智能,決定它們向哪個方向發展,是否會有沖突。對於壹個視覺上抓取壹些部件並滑動的遊戲來說,物理是遊戲中滑動部件或將部件放在正確位置的部分。對於壹個小遊戲來說,物理甚至是遊戲中決定答案對錯的部分。妳可能會給它起別的名字,但每個遊戲都有壹個紅肉部分作為遊戲引擎。在本文中,我稱這部分為物理。

動畫不是在遊戲裏放動畫gif圖片那麽簡單。妳需要讓遊戲在正確的時間畫出每壹幀。這並沒有聽起來那麽難。保留壹些狀態字段,如isDancing、danceFrame等,以便動畫更新可以決定是否切換到下壹幀。動畫更新真正做的事情太多了。動畫的真實變化是通過視頻更新來處理的。

聲音更新要處理觸發音,停止音,音量變化,音調變化。壹般情況下,寫遊戲的時候,聲音更新會生成壹些字節流到聲音緩沖區,但是安卓可以自己管理聲音,所以妳的選擇會是使用SoundPool或者MediaPlayer。它們都需要小心處理以避免錯誤,但您應該知道,由於壹些底層實現細節,小的低比特率聲音文件將帶來最佳的性能和穩定性。

視頻更新要考慮比賽狀態,人物位置,比分,狀態等等,把壹切都畫在屏幕上。如果您使用主循環,您可能需要使用SurfaceView並進行“推送”繪制。對於其他視圖,視圖本身可以調用繪制操作,主循環不必處理。SurfaceView每秒生成的幀數最多,最適合壹些屏幕上有動畫或運動部件的遊戲。視頻更新的工作就是獲取遊戲的狀態,並及時為這種狀態繪制圖像。其他自動化操作最好由不同的更新任務來處理。

3D還是2D?

在妳開始寫遊戲之前,妳必須決定是做3D還是2D。2D遊戲的學習曲線要低得多,因此通常更容易獲得好的性能。3D遊戲需要更深層次的數學技巧,壹不小心就會出現性能問題。如果妳計劃繪制比方框和圓形更復雜的圖形,妳需要使用3DStudio和Maya等建模工具。Android支持OpenGL進行3D編程,OpenGL裏面有很多不錯的教程。

建立簡單且高質量的方法

當妳開始的時候,確保妳不只是在整個遊戲中使用壹個龐大而冗長的方法。如果妳遵循我上面描述的主循環模式,這將非常簡單。妳寫的每壹個方法都應該完成壹個非常具體的任務,而且應該沒有錯誤。比如妳需要洗壹副牌,妳要寫壹個“”的方法,方法應該只做這壹件事。

這是壹種適合任何軟件開發的編碼實踐,但對於遊戲開發尤為重要。在有狀態的實時系統中,調試將變得非常困難。讓妳的方法盡可能的小。壹般的經驗法則是每種方法都有且只有壹個目的。如果您想以編程方式為場景繪制背景,您可能需要壹個名為""的方法。像這樣的任務可以很快完成,所以妳可以通過積木來開發妳的遊戲,妳可以繼續添加妳想要的功能,而不會讓它變得難以理解。

最重要的是效率!

性能是任何遊戲的主要問題。我們的目標是讓遊戲反應盡可能快,看起來盡可能流暢。有些方法如Canvas.drawLine很慢。並且在主畫布上繪制屏幕大小的比特是很昂貴的。如何平衡是實現最佳性能所必需的。壹定要管理好自己的資源,用技能用最少的CPU資源完成任務。再好的遊戲,如果性能不好,玩起來也很無聊。壹般來說,人們很難容忍遊戲卡或者反應慢。

提示和技巧

看看SDK中的例子LunarLander。它使用的是SurfaceView,適用於壹款每秒需要處理最多幀數的遊戲。如果要做3D,例子裏有GLView可以處理很多3D顯示的初始化任務。對於LightRacer,我不得不優化繪制壹切的方法,否則幀率會大大降低。我只在視圖初始化時將背景繪制成位圖壹次。路徑放在它們自己的位圖中,並隨著驅動程序的推進而更新。這兩個位圖在每壹幀都被繪制到主畫布上,驅動程序繪制在最上面,最後會有壹個爆炸。這項技術使遊戲運行在壹個可玩的水平。

如果可以的話,讓妳的位圖大小正好等於妳要在屏幕上畫的大小也是壹個好的習慣。這樣做了之後,就需要伸縮,這樣可以節省CPU資源。

遊戲中壹致的位圖配置(如RGBA8888)。這將通過減少不同格式之間的轉換時間來節省圖形庫的CPU時間。

如果妳決定開發3D遊戲,但是對3D壹無所知,妳需要選擇壹到兩本關於3D遊戲編程的書籍,學習線性代數。妳至少要懂點積,叉積,向量,單位向量,正規,矩陣,變換。這方面我見過最好的書叫《3D遊戲編程與計算機圖形數學》。

聲音文件應該小且比特率低。需要加載的越少,加載速度越快,遊戲需要的內存就越少。

使用OGG文件的聲音和PNG文件的圖片。

當活動被破壞時,確保釋放所有媒體播放器並釋放所有資源。這確保了垃圾收集器清除所有內容,並且遊戲之間沒有內存泄漏。

加入Android Google團隊,尋求社區支持。這裏有人可以在開發過程中幫助妳。

最重要的是,花時間進行測試和再測試,以確保每個小部件都如您所願地工作。改進遊戲是整個開發過程中最耗時最困難的部分。如果貿然上市,很可能會讓用戶失望,妳會覺得自己所有的努力都白費了。妳不能讓每個人都喜歡妳寫的東西,但妳至少應該努力出版妳的最高質量的作品。

  • 上一篇:ps做海報難嗎,知乎?-如何系統的學習PS?
  • 下一篇:如何指出陌生人的技巧,補充壹些介紹?
  • copyright 2024遊戲中心平台