2011-04-27 97 views

回答

10

執行此操作的最佳方法是將ByteArray與writeObject方法一起使用。就像這樣:

function clone(source:Object):* { 
    var copier:ByteArray = new ByteArray(); 
    copier.writeObject(source); 
    copier.position = 0; 
    return(copier.readObject()); 
} 
這個

更多信息,在這裏:http://www.kirupa.com/forum/showpost.php?p=1897368&postcount;=77

+1

我不確定是否深層克隆了某物。我記得很久以前測試過這樣的東西。它可以工作,但是如果你有類似於Vector對象的東西,那麼你最終將得到一個新的Vector,其克隆中包含相同的對象。 – divillysausages 2011-04-27 08:05:52

+0

如果你能告訴我這是行不通的還是另一種更好的解決方案,那麼它是多麼歡迎:) – rzetterberg 2011-04-27 08:07:49

+2

好吧,我只是在這裏測試它,它的工作原理,忽略我以前的評論。如果你想保持類型安全,你需要在你的類上使用'registerClassAlias()'。無論是在課堂上還是課堂上的任何課堂上。例如。如果你有一個'TestClass'類,它包含'Sprites'的'Vector',你需要在'TestClass'和'Sprite'上調用'registerClassAlias()',否則你會返回一個Object具有「精靈」所有屬性的「對象」矢量圖# – divillysausages 2011-04-27 08:34:52

0

如果你想深克隆的顯示對象,這僅僅是它爲我工作的方式:

 public static function clone(target:DisplayObject):DisplayObject  { 
       var bitmapClone:Bitmap = null;   
       var bitmapData:BitmapData = new BitmapData(target.width,target.height,true,0x00000000); 
       bitmapData.draw(target);  
       bitmapClone = new Bitmap(bitmapData); 
       bitmapClone.smoothing = true;   
       return bitmapClone; 
} 

請注意,這隻會複製視覺對象。它不會複製方法或屬性。 我用這個當我加載外部圖像,並在多個地方使用它們。