2011-06-03 47 views
0

我有一個動畫片段集合,我想創建一個實例的克隆(新實例),每次我創建一個新的對象。克隆一個類的實例(顯示對象)

例如

var s:Star = new Star(); // star-shaped movielcip 
addChild(s); 
// then I want to duplicate an instance of s and add it beside s 

對於像上面的例子,這是很簡單的創建一個新的實例使用不同的名稱,只是把它添加到顯示列表。但是我有一個我想克隆爲一個組的對象列表......?

+0

您可以將模板對象放在數組中,然後遍歷數組並創建新對象,使用數組中的模板對象來初始化您在新對象上需要的任何屬性。那有意義嗎?它的種類取決於你想要「克隆」的屬性數量/屬性。如果您對代碼示例感興趣,請告訴我。 – Ian 2011-06-03 23:52:43

+0

一個代碼示例會很好,謝謝! – redconservatory 2011-06-04 00:17:57

回答

1

摩西的解決方案是正確的。克隆的目的是什麼?你不需要知道克隆的名稱來引用它?

一個選擇是你可以創建一個數組來存儲你的引用,所以你不需要明確地命名它們。使用摩西的代碼...

var clones:Array = new Array(); 
for each (var star:Star in [s, s2, s3, s4, s5]) { 
    clones.push(clone(star)); 
} 
trace(clones.length); // 5 

這將導致一個包含5個克隆恆星的數組。它只需要最少量的代碼,但是要確保你知道後面哪顆星是什麼。

+0

這與我原本寄給你的東西基本上是一樣的 - 除了這更好一點。 HotN和摩西是對的 - 我會去解決他們的問題。 – Ian 2011-06-04 04:49:49

2

下面的代碼是非常有名的克隆對象。這是最深刻和動態的。

... 
    function clone(orjObj:Object):Object { 
     var copyObj:ByteArray = new ByteArray(); 
     copyObj.writeObject(orjObj); 
     copyObj.position = 0; 
     return(copyObj.readObject()); 
    } 

    var s2:Star = clone(s); 
    s2.x = s.x + s.width; 
    s2.y = s.y; 
    addChild(s2); 
+0

這是好的,但我試圖創建一個新的實例,而不必訴諸創建新的實例名稱... – redconservatory 2011-06-04 00:19:02

+1

您的克隆方法不適用於DisplayObject實例。它只適用於簡單的值對象。您只能將AMF compilant對象序列化爲ByteArray。 – maxmc 2011-06-04 12:22:13