2013-08-06 49 views
0

我目前正在開發某種遊戲。這是一個側面滾動,所以很多項目正在移動 - 這將導致重繪。我在另一個(不是UI)線程的SurfaceView中繪製了它,但只要有更多的項目要繪製,性能就會下降。 有沒有提高性能的「好」機制?我能以某種方式在多個線程中執行此操作嗎?畫布,繪畫的多個項目,性能問題

我想過創建多個畫布上,畫上每一個(在不同的線程)我的ViewObject列表的一部分,但我不知道如何「合併」這些。

當我開始添加旋轉圖像時,性能問題開始了。我像這樣旋轉它們:

  Matrix matrix = new Matrix(); 
      matrix.preRotate(mRotation, (float) (mResourceBitmaps[mFrame].getWidth()), (float) (mResourceBitmaps[mFrame].getHeight())/2f); 

      Bitmap bmp2 = Bitmap.createBitmap(mResourceBitmaps[mFrame], 0, 0, 
        mResourceBitmaps[mFrame].getWidth(), mResourceBitmaps[mFrame].getHeight(), matrix, true); 

因此,我爲代碼中的每個動畫幀旋轉每個位圖。當我開始添加一個帶有LruCache的BitmapHolder類時,它變得更快,該類繼續引用每個旋轉的位圖(以及「標準」位圖)。但它仍然滯後。

如何在這個「更專業」的遊戲做的任何建議?由於學習的因素,我真的很想自己開發,不使用任何第三方庫。

所以基本上,我的問題是:如何做我畫的位圖/資源「很大的」上一個帆布/ surfaceview(因爲它們存儲爲PNG我繪製的文件夾)?或者我必須回退到代表對象而不是SurfaceView的多個視圖元素?

回答

0

您不應該在每個幀中創建新的位圖對象。你永遠不會以這種方式獲得好的幀速率。

嘗試使用drawBitmap(Bitmap, Matrix, Paint)替代版本。這樣你可以讓系統處理每個對象的旋轉。

或者,你可以使用rotate()一個簡單的基於度的旋轉。不要忘了save()之前你的畫布,restore()之後。

+0

不知道我可以直接將我的矩陣傳遞給繪圖函數,謝謝。以爲我不得不使用矩陣重新創建位圖。 – damian