2010-10-22 75 views
3

以下是我嘗試克隆MovieClip的代碼,它不起作用。 如果代碼工作正常,我們應該看到兩個循環。AS3克隆MovieClip

/*The original MovieClip*/ 
var circle:MovieClip = new MovieClip(); 
circle.graphics.beginFill(0xAA0022); 
circle.graphics.drawCircle(40, 40, 40); 
circle.x=10 
addChild(circle); 

/*CLONE the MovieClip - IT DOES'T WORK FROM HERE DOWN*/ 
var cloneCirle:MovieClip = new MovieClip(); 
    cloneCirle=circle 
    cloneCirle.x=60 
    addChild(cloneCirle); 

回答

8

當你做cloneCircle=circle,它不是複製或克隆任何東西。這只是說變量cloneCircle是您的原始circle MovieClip的另一個名稱。你需要做的是使用Graphics.copyFrom()方法。

嘗試:

var cloneCirle:MovieClip = new MovieClip(); 
cloneCircle.graphics.copyFrom(circle.graphics); 
cloneCirle.x=60; 
addChild(cloneCirle); 
+0

嗯我收到「場景1,圖層 '圖層1',第1幀,第18行\t 1120:未定義的屬性cloneCircle的訪問。 「 – dngo 2010-10-22 17:50:55

+0

我知道了var cloneCirle:MovieClip = new MovieClip(); cloneCirle.graphics.copyFrom(circle.graphics); cloneCirle.x = 60; addChild(cloneCirle); – dngo 2010-10-22 17:54:31

+0

您拼寫cloneCircle錯誤...請將此答案標記爲已接受(複選標記)! – Mahir 2010-10-22 18:41:27

3

這是創建在編譯時存在於FLA庫的舞臺對象的一個​​副本

對象必須在它打勾爲ActionScript中的「導出的屬性面板並且有效的類名在「類別」框

如果符號只有一個幀添加另一所以它註冊爲MovieClip(),而不是Sprite()

private function cloneObject(source:DisplayObject):void 
{ 
    var objectClass:Class = Object(source).constructor; 
    var instance:MovieClip = new objectClass() as MovieClip; 
    instance.transform = source.transform; 
    instance.filters = source.filters; 
    instance.cacheAsBitmap = source.cacheAsBitmap; 
    instance.opaqueBackground = source.opaqueBackground; 
    source.parent.addChild(instance); 
    instance.x += 20; // just to show the duplicate exists! 
} 

http://snipplr.com/view/44734/

3

here改編:

function copyClip(clip:MovieClip) 
{ 
    var sourceClass:Class = Object(clip).constructor; 
    var duplicate:MovieClip = new sourceClass(); 
    return duplicate; 
}