Flash游戲開發:BitmapData的使用
2020-07-17 13:18:50
供稿:網友
作為Flash游戲開發者,整天都在跟Flash的顯示效率搏斗。最近為了更好的節約效率,在下做了一些測試,得到了一些結果,同時也感到了一些問題,請諸位高手也幫忙看看!
********************************************************************
1、copyPixels,5000次,1000*590,沒有lock,后addChild
cost: 10828
cost: 10844
cost: 10625
2、copyPixels,5000次,1000*590,沒有lock,先addChild
cost: 10828
cost: 10844
cost: 10625
3、copyPixels,5000次,1000*590,有lock
cost: 10766
cost: 10654
======================================================
結論:
1、lock沒有效果?
2、先后addChild也沒區別?
======================================================
4、copyPixels,5000次,128*64,沒有lock,先addChild
cost: 47
cost: 47
5、copyPixels,5000次,1000*590,rect(128*64),沒有lock,先addChild
cost: 62
cost: 62
6、copyPixels,5000次,1000*590,rect(128*64),dest(950,0),沒有lock,先addChild
cost: 31
======================================================
結論:
1、copyPixel速度和拷貝區域象素數量嚴格相關;
2、原始圖大小有少許影響,原始圖如果比較大,跟小圖取一樣范圍,也會有些許效率損失
======================================================
7、draw,5000次,128*64,沒有lock,先addChild,圖片無透明度
cost: 219
cost: 219
8、draw,5000次,1000*590,沒有lock,先addChild,圖片無透明度
cost: 10328
cost: 10407
9、draw,5000次,128*64,沒有lock,先addChild,整張圖片有透明度漸變
cost: 218
cost: 218
cost: 219
10、draw,5000次,1000*590,沒有lock,先addChild,整張圖片有透明度漸變
cost: 11843
cost: 11610
cost: 11969
======================================================
結論:
1、draw對Bitmap有優化,越大尺寸,draw和copyPixel的區別越小
2、透明度對大圖片draw效能有影響,大約是畫圖本身的10%,小圖片可忽略
======================================================
11、draw, 5000次,1000*590,clip(128,64),沒有lock,先addChild,無透明
cost: 156
cost: 172
cost: 171
12、draw, 5000次,1000*590,clip(128,64),沒有lock,先addChild,整張圖片有透明度漸變
cost: 219
cost: 219
======================================================
結論:
1、clip對draw性能提升顯著,基本相當于clip后大小的圖片的效能
2、大圖clip后效果反而比同尺寸小圖高?猜想是顏色原因,見下一個實驗
======================================================
13、draw,5000次,128*64,沒有lock,先addChild,圖片純色
cost: 157
cost: 172
cost: 157
14、draw,5000次,128*64,沒有lock,先addChild,圖片雜色
cost: 172
cost: 171
======================================================
結論:
1、效能和圖片顏色沒有關系??看來只能是和png存儲結構有關了。已測試的3張同樣大小的圖片,純色與雜色接近,云彩圖案的最慢。
======================================================
15、循環用setPixel32和setPixel32逐象素設置,1000*590,1次
cost: 297
16、循環用setPixel32和setPixel32逐象素設置,1000*590,1000次
Error: Error #1502: 腳本的執行時間已經超過了 15 秒的默認超時設置。
17、循環用setPixel32和setPixel32逐象素設置,1000*590,10次,沒有lock
cost: 2875
18、循環用setPixel32和setPixel32逐象素設置,1000*590,10次,有lock
cost: 2109
======================================================
結論:
1、這樣搞還是比較慢的……千萬不要這樣搞……
2、居然有15秒限制?…………
3、lock在這里體現了一些作用,可能因為逐象素操作對刷新的影響太大了。但是作用也沒有明顯到什么地步。
======================================================
19、draw,5000次,1000*590,目標圖片500*590
cost: 5875
======================================================
結論:
1、如所料一般,目標區域超出的部分也是不會畫的
======================================================
********************************************************************
我還會持續進行各種測試,有新的結果會繼續報告上來~