2012-03-06 87 views
1

我正在玩Android API,以期開發2D遊戲的長期前景。通常,我只能使用Canvas來繪製精靈作爲我的遊戲圖形。我希望能夠爲視覺效果執行大量繪圖,但似乎Honeycomb(3.0,API級別11)don't support hardware acceleration之前的Android版本。蜂窩之前的硬件加速

我不確定那是什麼意思。我無法讓自己相信繪圖是由CPU完成的,逐像素!!!如果我最終會產生像發光,鏡頭效果等效果......我會在每個像素上畫幾次。我是否有理由相信典型的智能手機CPU將無法以30 FPS的速度應對?

我並不奢求Android版本> = 3.0,因爲它們的constitute 8%已經不是這麼大的Android市場。我應該花時間去參加OpenGL嗎(我是OpenGL的初學者)?如果我這樣做了,你認爲我可以通過使用Canvas來覆蓋自定義android視圖頂部的效果來重繪GLSurfaceView來獲取任何內容,否則就可以進行繪製。或者是因爲任何原因混合這兩者的壞主意?

+0

根據維基百科的說法,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

回答

4

哦,上帝是的。特別是如果你的目標是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上。

+0

您是否建議將GLSurfaceView與其他非GL表面混合使用,比如按鈕等常用元素。如果唯一的開銷是這樣,我可以忍受CPU在屏幕上逐個像素複製20x20按鈕圖像。這是否還有其他重大的開銷? – enobayram 2012-03-06 16:16:09

+0

不是不是真的可以通過GLSurfaceView添加標準Android窗口小部件。我試圖避免在我的比賽中,但這是可能的,沒有速度顯着的速度懲罰。無論如何,我建議你做的第一件事情就是讓你獲得GLSurface的運行,就是在角落裏展示UPS,這樣當你剛剛做了一件讓事情放緩的事情時,你就會快速知道。 – 2012-03-06 18:28:37