簡體   English   中英

Android drawBitmap針對大量位圖的性能?

[英]Android drawBitmap Performance For Lots of Bitmaps?

我正在編寫Android游戲,我似乎在繪制到Canvas時遇到了性能問題。 我的游戲有多個級別,每個級別(顯然)都有不同數量的對象。

奇怪的是,在一個包含45個圖像的級別中,運行完美(幾乎60 fps)。 然而,另一個包含81個圖像的級別幾乎沒有運行(11 fps); 它幾乎無法播放。 這對我以外的人來說有點奇怪嗎?

我使用的所有圖像都是.png,上述級別之間的唯一區別是圖像數量。

這里發生了什么? Canvas不能在每個游戲循環中畫出這么多圖像嗎? 你們怎么建議我改善這種表現?

提前致謝。

對我來說似乎也很奇怪。 我也開發了一個游戲,很多關卡,我可以在屏幕上輕松擁有100個游戲對象,還沒有看到類似的問題。

如果使用得當,drawbitmap確實應該非常快; 它只不過是一個復制命令。 我甚至不畫畫圈子; 我有預渲染圓圈的位圖。

但是,Android中Bitmaps的性能對您的操作方式非常敏感。 創建位圖可能非常昂貴,因為Android可以默認自動縮放CPU密集型的png。 所有這些東西都需要在渲染循環之外完成一次。

我懷疑你在找錯了地方。 如果以相同的方式創建和使用相同類型的圖像,那么將屏幕圖像數量加倍不應該將性能降低4倍以上。最多它應該是線性的(因子為2)。

我的第一個懷疑是你的大部分CPU時間用於碰撞檢測。 與繪制位圖不同,這通常作為交互對象數量的平方而上升,因為必須測試每個對象是否與其他所有對象進行碰撞。 您將游戲對象的數量增加了一倍,但是您的性能下降到四分之一,即根據對象數量的平方。 如果是這種情況,請不要絕望; 有一些做碰撞檢測的方法,它們不會像對象數量的平方一樣增長。

與此同時,我會做基本的測試。 如果你實際上沒有畫出一半的物體,會發生什么? 游戲運行得更快嗎? 如果沒有,它與繪圖無關。

我認為這個講座會對你有所幫助。 轉到45分鍾。 有一個比較Canvas方法和OpenGl方法的圖表。 我認為這是答案。

我遇到了類似的性能問題 - 即1級運行良好,2級運行沒有

轉而不是渲染是一個錯誤(至少沒有具體)。 這是導致瓶頸的級別邏輯特有的其他因素。

點是...... Traceview是你最好的朋友。

方法分析顯示了CPU花費時間的地方以及為什么幀速率中出現故障。 (順便提一下,渲染成本在第2級也更高但不是瓶頸)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM