2011-05-28 164 views
11

我在我的遊戲中使用java + AndEngine。AndEngine遊戲的優化

在遊戲過程中我有一些結冰,我尋找的信息,並發現了一些步驟,如何優化遊戲性能:

  1. 避免GC(垃圾收集器)是 稱爲在遊戲中的主要作用: a)在遊戲時不要創建物體;
    b)不要創建不必要的對象;
  2. 是重複優化代碼非常 經常

我遵循這些步驟,但從來沒有少我在遊戲過程中有一定的凍結。

現在我在遊戲開始之前創建並加載所有紋理,並且不會卸載它們,這不是一個好主意嗎?我怎樣才能優化遊戲過程? 也許我必須在主要活動之前釋放所有可能的記憶,然後在每個關卡之後重新加載它們。

+2

什麼是精靈? – 2011-05-28 17:05:27

+0

嗯..真的,我現在不刪除它們,我想我必須在遊戲活動前卸載所有unusefull stuf – dilix 2011-05-28 20:09:50

回答

16
  1. 降低紋理尺寸。
  2. 降低質地交換機(又名嘗試使用spritesheets,使紋理需要改變儘可能少)
  3. 使用低質量的紋理(RGBA4444或RGB565,而不是RGBA8888)..
  4. 呼叫setIgnoreUpdate其中實體不需要更新。
  5. Use SpriteBatches if possible

FYI: AndEngine的下一個版本,所以你有很多更多的可能性,以改善與自定義着色器和實體的業績(未來12月中旬)體育GLES2。

此外,它將在UI線程(直接在onCreate)上執行GL線程的第一幀上的啓動管道(onLoadEngine/onLoadResources/onLoadScene/onLoadComplete),而不是阻塞。

此外,它還允許您輕鬆地將流水線的各個階段卸載到線程中,而不會整體破壞流水線。將會有一個非常簡單的實現BaseGameActivity的子類,在執行管道的階段時顯示確定的ProgressDialog。實體將隨着它們附着到場景中而彈出。

一般來說,這意味着實際的加載時間會減少,更重要的是,感覺加載時間會顯着減少!創建加載屏幕非常簡單,與之前的痛苦不同。

+4

正如我的文章所引用的,這裏是關於12月份GLES2發佈的信息:http://www.andengine.org/forums/announces/andengine-gles2-pre-release-on-december-23rd-t6097.html – 2012-01-05 16:09:42

+0

任何加快顯示TMX地圖的機會? TMXLayer.draw()分別繪製每個圖塊。任何將多個TMX切片放入單個頂點緩衝區並一次繪製它們的機會? – Yar 2012-07-21 18:35:39

4

我使用的方法是在關卡開始之前加載所有需要的紋理。當您進入下一級時,您應該只卸載下一級不需要的對象的紋理。其他人,如記分牌或主背景不應加載。當然,您需要卸載活動onStop中的所有紋理。 的確如此,首先您應該優化循環代碼,例如,您不應該在循環期間訪問任何資源,在開始循環之前嘗試獲取所有資源。

7

您可能需要發佈一些關於您的遊戲的更具體的信息,但一個建議是確保您重新使用精靈和對象。例如,如果您的遊戲中有任何重複生成的對象(隨機飛行的敵人,子彈,重複的背景元素),請嘗試一次考慮屏幕上需要的對象的最大數量,然後創建多個對象在遊戲開始之前,根據需要加載和重置它們。

例如我的遊戲使用「隨機」從屏幕頂部飛入的敵人。起初,我每次打電話都會造成一個新的敵人,但是現在我有一個ArrayList,它總共只包含6個敵人,每個敵人可以重複使用並移動數百次。這給我帶來了巨大的性能提升,尤其是在較長的遊戲時間段。這與GC優化有關,但您之前可能沒有關於優化的內容。

+5

對象的重用通常被稱爲_Object pooling_。使用對象池將阻止GC運行。 – Eloff 2011-08-04 16:27:25

5

在進行搶先式優化之前先分析代碼的重要性不能被誇大。如果你是GPU綁定的話,優化所有的精靈是沒有意義的(這是不太可能的,但是因爲你使用的是GLES2.0和可編程管線,而且我們不知道你是如何編寫GLSL代碼的,所以可能)。

您可以使用幾種工具進行性能分析,因爲需要進行不同的配置。

對於內存分析,可以使用DDMS和traceview來檢查內存分配以及GC在特定時間段內被調用的頻率。這太問題有更多的細節:

How can I profile my Android app?

關於經常運行的代碼,你可以隨時時間自己動手,結果寫出到日誌文件。它有點勞動密集型,但你可能已經知道自己的代碼可能很慢。

+1

好點,我想這是一個非常明顯的建議,沒人會提出這樣的建議:-)另外,考慮到問題的日期,OP沒有使用GLES2,因爲它當時還在開發中。 – JohnEye 2012-09-10 14:49:06

0

這將明確地提高您的遊戲性能:保持默認主題始終呈現。這裏是一個教程http://www.andengine.org/forums/tutorials/andengine-performance-tip-of-the-day-t810.html