2012-06-28 49 views
1

我在創建任何DisplayObject的位圖的類中創建了此函數。 正如您將看到的,每次創建新的位圖時,都會創建一個新的BitmapData對象和一個新的位圖對象。AS3 - 刷新位圖的最有效方法

有沒有辦法調整這個函數,所以我不再需要每次運行函數時重新創建這兩個對象?

private var bitmapData:BitmapData; 
private var bm:Bitmap; 

crop(someSprite.width, someSprite.height, someSprite); 

private function crop(_width:Number, _height:Number, displayObject:DisplayObject):void { 

bitmapData.dispose(); 
bitmapData = new BitmapData(_width, _height, false, 0xFFFFFFFF); 
bitmapData.draw(displayObject); 

bm = null; 
bm = new Bitmap(bitmapData, PixelSnapping.ALWAYS, true); 
bm.smoothing = true; 
bm.alpha = 0; 

} 

感謝,

馬克

回答

2

如果顯示對象的尺寸改變每一次,你將不得不每次都重新創建一個BitmapData。對於Bitmap對象,您不需要重新創建它。你可以簡單地直接設置位圖數據:

bm.bitmapData = bitmapData; 
+0

好的謝謝。至少這是我使用的少一個「新」。 – crooksy88

2

如果你想避免創建一個新的BitmapData每次你只是在你的地圖使用指望一次,在你的作物的方法,你首先要明確的最大尺寸創建一個的BitmapData時間yourMap.fillRect(yourMap.rect,0),然後使用裁剪尺寸的剪輯矩形在右上角進行繪製。要獲得額外的微小性能提升,可以設置將其顯示爲裁剪尺寸的Bitmap對象的ScrollRect屬性。

+0

感謝您的信息。我雖然有點失落。什麼是yourMap對象,這將如何適用於上面的例子? – crooksy88

+0

您的地圖將是您創建一次然後重複使用的最大預期尺寸中的一個位圖數據。唯一的問題是,如果您使用crop()方法更像是一般位圖數據的實用程序,則此方法不起作用,因爲如果您只有一個地圖實例,它將更改所有使用它的位圖的視圖,只要您致電作物。 – Quasimondo