2010-10-15 80 views
1

我正在開發一個橫向滾動的android遊戲,我碰到過一個呃逆。Android:巨大的多層滾動背景

遊戲在Canvas對象上呈現圖形。該遊戲具有大約6個滾動層,主地層,碰撞層,前景層和兩個背景層,這些層都以可變速度滾動以獲取相機深度。

現在,問題出現在這裏: 遊戲的圖形功能巨大的獨特水平,完整地繪製出來。它不是tilebased,沒有圖形重複。但是,加載整個圖形層時,會收到內存不足異常。爲了解決這個問題,我將所有圖層切分爲200 x 300個獨特的矩形圖塊,並且遊戲只在可見時加載可見的圖片。它不能一次加載所有的圖塊,因爲它會拋出內存不足異常。所以當然,這要求我在內存塊不再可見的情況下處理內存塊,否則我會繼續將這些內存塊添加到內存中,並再次觸發內存異常異常。這意味着我必須使用BitmapFactory爲遊戲循環中的資源創建一個新的位圖,以顯示每個圖塊。當然,在遊戲循環中初始化這些瓦片位圖時,每當瓦片留下可見性時,我必須處理垃圾收集器滯後。

有沒有更好的方式去完全使用畫布和保留我獨特的「宏」瓷磚,而不訴諸可重複使用的微瓦片?它會使用OpenGL來獲得好處嗎?如何或爲什麼?

回答

0

OpenGL將允許您顯式控制紋理何時從內存中加載/卸載。您可能可以利用OpenGL的某些功能來開發用於引入和卸載紋理的「分頁」系統。這將允許你避免垃圾收集器。

但是,您通常會做正確的事情 - 從圖形內存中刪除不相關的圖形,以便爲需要顯示的人騰出空間。