2011-04-28 57 views
3

我正在製作我的第一款Android遊戲,它將使用opengl es進行3D街機遊戲。我一直在研究它很長一段時間,主要是爲未來的靈活性優化引擎。反正現在我完全用遊戲功能和所有漂亮的東西來完成,但它滯後於手機,而不是我的調試手機。該遊戲對於手機遊戲具有相當高質量的圖形,因此預計會出現一些小問題,但在Nexus S上運行遊戲並在MyTouch 4G上運行遊戲的性能差異非常大。這款遊戲甚至在LG Optimus等低端手機上都無法播放(遊戲運行,但是它太過震盪,無法播放)。在我的Nexus SI上很少會有波動(我已經在遊戲中實現了幀率獨立運動),但在MyTouch 4G上它更常見,雖然遊戲仍然可以播放....但是很煩人分析和優化遊戲android

我來自桌面遊戲開發背景,優化從來沒有受到我的興趣。你能推薦什麼來幫助我加快遊戲速度?

我試過儘可能地優化代碼,並且性能有了顯着的提高,但似乎有些事情我已經遺漏或忽略了。它是一個巨大的遊戲,具有完整的引擎和大量的代碼。

我試着追蹤所有分配,並確保它們在運行時不會被釋放或遺忘,以便GC在您播放時不會被調用。這基本上是我所能想到的,我不知道還有什麼可以讓它延緩,因爲即使它們質量很高,我在遊戲中添加了一個選項,讓您可以像在電腦遊戲中一樣選擇低,中和高的圖形質量,低位和高位之間的差異在600-900個頂點之間!我注意到的唯一改進就是加載時間。也沒有任何特殊的後期處理效果,照明,着色器,實時SSS或任何其他。只是紋理的面孔:P

也是我所苟同的「lagg」是隨機凍結。我很確定他們是GC,但它可能是別的,因爲我認爲我發現並控制了所有的分配(有很多)。因爲我的遊戲是幀速率獨立的,所以每當它解凍時,玩家和敵人以及所有東西都「向前跳躍」跟上,這使得已經很困難的遊戲變得更加困難!

我是新來的分析和優化。如何使用android調試工具(或其他第三方工具)更好地瞭解我的遊戲在運行時如何執行以及何時/爲什麼凍結以便我可以修復它們。

此外,獎金問題:)有沒有辦法讓我看看它會如何在其他手機上執行而沒有真正擁有手機或知道擁有手機的人?就像,如何快速將它走在Droid X的,即使我沒有Droid X的,也沒有人知道

+0

你有沒有跟蹤在DDMS視圖堆分配在Eclipse?每次有GC時它都會刷新,因此您可以確定凍結是否與GC調用相關。從那裏你可以挖掘實際分配的內容並從那裏出發。這是最有可能的分配('new' Anything),所以很自然地,你需要預先分配所有的東西並儘可能地利用對象池。 – LeffelMania 2011-04-28 20:43:14

+0

另請參閱:http://stackoverflow.com/questions/5626947/optimize-android-application-before-release – bigstones 2011-04-28 22:06:40

回答

6

您是否嘗試過使用traceview分析代碼? 插入

Debug.startMethodTracing("myfile"); 
中的onCreate

,然後

Debug.stopMethodTracing(); 

,你想讓它完成寫入文件。要查看結果,請將設備插入計算機並運行:

/path/to/android-sdk/platform-tools/adb pull /sdcard/myfile.trace 
/path/to/android-sdk/tools/traceview ./myfile.trace 

這將顯示哪些類需要更多時間。您可能能夠優化較慢的類,並/或將其移至後臺線程。

你提到它可以在一些手機中正常工作,也許這些新手機的24mb /應用程序限制而不是16mb /應用程序限制?您可以在Eclipse中嘗試Memory Analyzer,以檢查內存泄漏或不必要的大對象。要安裝,進入幫助 - >安裝軟件,並使用

http://download.eclipse.org/mat/1.1/update-site/ 

然後,當你在DDMS視圖調試,選擇轉儲HPROF文件(綠色玻璃與紅色箭頭),應該打開記憶分析儀。

編輯 -

看來你需要將Android的HPROF文件現在轉換,如所描述here

+0

只需注意Debug跟蹤,就需要WRITE_EXTERNAL_STORAGE權限。 – Peanut 2014-03-07 21:27:16

0

這基本上是所有我能想到的 做。我不知道 還有什麼可以讓它滯後。

很多人這樣做,這是通過嘗試去思考的事情來優化。這會帶你分開,但只有部分方式,特別是如果軟件很大。

其實,代碼中的東西需要時間expose themselves到快照發現。 你不需要考慮它們。 你只是讓程序顯示它們。 Here's an example.

0

首先仔細看看logcat的說法。也許你會找到不必要的滯後begviour的答案。其次,如果你想檢查方法執行的頻率和時間,只需使用DDMS。不知道你使用的是什麼類型的環境,但Eclipse中有一個Perspective,它有一個名爲「Start method profiling」的選項。只需點擊它,然後等待幾秒鐘並取消點擊。過了一會兒,你會得到壓倒性的報告。 有關設備問題,請讓我引用:「如果您想知道您的應用在給定設備上的表現如何,則需要在該設備上進行測試。」從[1]

[1] http://developer.android.com/guide/practices/design/performance.html