我正在將Windows Phone 7(在XNA 4.0中開發)移植到Android上的2D動作遊戲。我正在使用Canvas.drawBitmap()調用的批次 - 每幀大約200-300次更新 - 每次調用時都會使用不同的Paints來處理繪製時不同的透明度和着色。這是管理粒子系統和各種其他覆蓋和遊戲中的效果,以及平鋪背景和遊戲中的精靈。我沒有做任何按需調整大小或旋轉,它是簡單的src-> dest矩形大小相同。Android Canvas.drawBitmap性能不佳 - 切換到OpenGL?
在WP7上運行速度爲30 + fps,但我在我的測試'droid硬件(Samsung Galaxy S)上掙扎了12fps。這使得遊戲無法播放。通過剖析代碼,我已經證實,我所有的時間都在Canvas中丟失。我似乎遵循了所有常見的性能建議 - 使用SurfaceView,注意GC,因此不會產生一次性拋棄對象,並避免Drawables。
我正確理解Canvas.drawBitmap()是CPU綁定的,如果我想提高性能,我必須切換到使用GPU的OpenGL?我無法在任何地方發現它的禿頭,但在一些評論之間閱讀,我認爲這可能是我的下一步......?
你是如何繪製你的位圖?什麼顏色格式?什麼尺寸?在圖形編程中,有很多事情要尊重事物的快速發展。請張貼一些代碼。 –
偉大的問題。我有與Canvas.drawBitmap()相同的問題,並最終在openGl中移植遊戲,但也許我錯過了一個超級祕密的Canvas選項? –
遊戲是100多個班級,長達數萬行。我不確定我可以發佈一個合理的摘錄,這將是特別豐富的。 Rects從16x6到128x128不等,全部ARGB_8888 –