2013-03-08 112 views
0

對不起,我確定我的問題在互聯網上有很多答案,但我不知道足夠的編程在我的搜索中具體。一個對象給另一個對象,不僅僅是對它的引用

好的,所以這是我的問題。讓我們來看看這個例子,這很簡單:

var obj:Object = new Object; 
var bit:Bitmap = new Bitmap; 
    obj["key"] = bit; 
    obj["key"].x = 30; 
    trace(obj["key"].x); //30. 

var bit2:Bitmap; 
    bit2 = obj["key"]; 
    trace (bit2.x); //30. 
    bit2.x = 60; 
    trace(bit2.x) //60. 
    trace(obj["key"].x); //60 ??? 

所有我想要做的是股票在一個對象的位圖。而這部分是好的

trace(obj["key"]); // [Object Bitmap] 

但是,如果我嘗試把這個交給另一個對象,發生它沒有任何意義,我的方式。這就像我的對象在內存中爲位圖提供了參考,而不是位圖本身。所以看起來我有兩個對我的位圖的引用。我的所有應用程序都基於這些對象,而且我真的需要一種方法來獲取我的位圖的副本,而不僅僅是對它的引用。所以我想改變這些屬性而不必在我的對象中改變它們。

回答

2

試試這個:

private function bmpCopy(srcBmp:Bitmap):Bitmap{ 
    return new Bitmap(srcBmp.bitmapData.clone()); 
} 

//in your code somewhere... 
bit2 = bmpCopy(bit1); 

你只是還記得解放了位圖,當您使用它們來完成。

+0

非常感謝,確實有效。即使困難,我仍然不太明白。但那很好,我以爲我用了一種錯誤的方式。 – Inexo 2013-03-08 22:55:08

+0

只有當你調用'new'時,你才能得到任何一種新的對象。將您創建的對象的值分配給另一個變量時,實際上不會創建一個新的變量。 bmpCopy方法爲你調用new,而srcBmp.bitmapData.clone()是實際數據被複制並傳遞到Bitmap構造函數的地方。現在您有兩個具有相同像素數據的位圖。 – mfa 2013-03-08 22:56:09

+0

非常感謝,我明白了。 – Inexo 2013-03-08 23:28:43

相關問題