2016年1月12日 星期二

SurfaceView的動畫會閃爍破碎......用同一個迴圈完成Draw和Post

在Android上,要能夠將Draw和Post分開,必須要另外產生一張Canvas。
Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
Post時,只需要在lockCanvas所取到的Canvas上「畫一次」Bitmap(b)即可。

不懂?



如果有十個物件要繪製,從lockCanvas到PostCanvas這中間進行這十次的繪製動作,會導致畫面開始延遲和閃爍。

但如果把這十次縮減成一次,從lockCanvas到PostCanvas這中間所花的時間也就只需要十分之一,畫面更新效率理論上會提升...至少三倍?



野心大的人可能會把進行Draw的Canvas也搬到另一個Thread中進行。

那就會有兩個Thread,一個是DrawThread,一個是PostThread。

但如果畫面更新率不統一,PostThread中要執行Draw時DrawThread也進行Draw了,則Post畫面上使用的Bitmap可能就會被回收......破碎跟黑塊可能就是這樣來的.......



但,在高段的遊戲繪圖領域中,確實是用多個Thread來處理繪圖。

但那恐怕是純Thread的領域,跟繪不繪圖並沒有太直接的關係。

沒有留言:

張貼留言