哦,上帝是的。特別是如果你的目標是Android 3以前的設備,從SurfaceView(使用Canvas.drawXxx()調用)到OpenGlSurface的效果很好。您不僅每秒鐘有更快的幀(更新),而且內存消耗更好。
下面是一些我已經注意到了幾點:
- 如果你想要做的(多)精靈動畫,以加載OpenGL紋理並顯示在一個OpenGL四路圖像做他們給你很多更多的內存空間。這是因爲雖然普通的Bitmap對象被Android進程內存限制(這類似於16-48 Mb,取決於設備和Android版本)限制,但在這些圖像之外創建OpenGL紋理(並在之後清除內存)沒有這個限制。你只受限於設備上的總內存,這是很多的16-48兆。
其次,但仍然與此有關,使用Android 2和以下版本跟蹤Bitmap實例需要多少內存是非常複雜的,因爲這些實例不會針對Java堆內存進行報告。它們被分配在其他一些內存空間中。總之,如果你使用OpenGL,另一個麻煩就少了。
簡單的動畫如旋轉圖像變得輕而易舉與OpenGL。您只需製作一個四邊形,然後以任何您想要的方式進行旋轉。與Sprite動畫等效是爲了順序顯示圖像的不同(旋轉版本)。這對內存消耗和速度更好。
如果你在做類似2D的遊戲,使用OpenGL的正交投影不僅可以簡化許多常規OpenGL透視投影的麻煩(無用,在這種情況下),但它實際上可以減輕在需要縮放所有圖形元素時,您會使用普通SurfaceView獲得的許多問題,以便在不同的屏幕分辨率/比例下看起來相同。使用OpenGL的正投影可以有效地創建所需的寬度和高度的固定區域,然後讓OpenGL自動將其投影到設備屏幕區域。
不言而喻,製作諸如脈動光線等影響某些圖形元素的簡單效果,與使用OpenGL(在這種情況下,您只是使燈光發出脈衝,並且所有內容都相應點亮)相比,更容易做到用SurfaceView模擬這個並在精靈中烘焙。
我已經用SurfaceView和Canvas開始了一個小型的asteriod防禦類遊戲,然後爲了上述原因而快速切換到OpenGL。長話短說,遊戲現在看起來更好,雖然它最初運行在三星TEOS上的16個UPS和Optimus LG 2x上的30個UPS上,現在運行在Teos上的33個UPS和LG 2x上的約80個UPS上。
根據維基百科的說法,3.0版本(Honeycomb)到4.4(KitKat)的版本更像是已安裝版本的75%。 http://en.wikipedia.org/wiki/File:Android_historical_version_distribution_-_vector.svg – mlepage 2014-02-03 16:40:51