2013-07-27 43 views
0

我正在使用Flash CS6和AIR的手機遊戲。也在同一平臺上進行設計和編碼(不使用starling等)。使用Dispose將MovieClip轉換爲位圖()

我將movieClip(靜態,而不是動畫)動態轉換爲位圖,它的工作正常。但我意識到這個過程bitmapData緩存內存和大形狀需要大量的內存。然後,我決定通過dispose()將其添加到bitmapData中。但是它從舞臺和其他任何地方移除它。

我的代碼;

var target:MovieClip = new Ex_mc2(); 
target.x=100; 
target.y=300; 
addChild(target); 

var bounds:Rectangle = target.getBounds(this); 
var bmpData:BitmapData = new BitmapData(Math.floor(bounds.width), Math.floor(bounds.height), true, 0); 
var bmpMatrix:Matrix = target.transform.matrix; 
bmpMatrix.translate(-bounds.x, -bounds.y); // Draw bitmap 
bmpData.draw(target, bmpMatrix); 

var bmp:Bitmap = new Bitmap(bmpData); 
bmp.x=100; 
bmp.y=300; 
addChild(bmp); 

removeChild(target); 
//bmpData.dispose(); I want to use this and i dont want my bmp disappear 

尋找解決方案一個星期,但我無法弄清楚。 所以我的問題是;

我可以將movieClip轉換爲位圖並釋放內存嗎?像添加一個靜態PNG文件?

回答

0

BitmapData - 實際上是屏幕上顯示的內容。格式與BMP幾乎相同,但字節順序相反。 Bitmap只是一個顯示容器,用於將圖像內容輸出到屏幕並提供常見的DisplayObject API。

所以,如果你使用BitmapData.dispose(),你實際上是在釋放由圖像佔用,顯然後面還有什麼可通過Bitmap容器顯示內存。

+0

謝謝,所以如果我明白了吧,在靜態PNG上添加舞臺或使用bitmapData轉換movieclip沒有區別?我必須處理內存使用情況? – mtilhan

+0

正確。無論哪種情況,您都會有一個表示圖像數據的「BitmapData」對象。 –

+0

感謝您的解釋。我浪費了整整一週的時間 – mtilhan