2010-10-11 65 views
0

我有一個movieclip(childMc),它是舞臺上另一個movieclip(parentMc)的子節點。我的代碼爲舞臺上的子動畫片段創建一個引用(refMc),然後通過調用函數deleteChild刪除以前的父動畫片段(parentMc)。問題是刪除也刪除參考。我如何中斷參考,以便參考文獻(refMc)保存在舞臺上?這裏是我的代碼:刪除as3中的movieclip引用

級代碼:

var refMc:MovieClip; 
var parentMc:MovieClip=this.addChild(new parentSymbol()); // parentSymbol has childMc inside of it 
function deleteChild(e:Event) 
    { 
    refMc=parentMc.childMc; 
    this.removeChild(parentMc); 
    } 

任何幫助,將不勝感激。

回答

2

那麼,刪除父母將從舞臺上刪除所有的孩子。 有兩種方式來處理這種情況

1 - 如果你想刪除父,但不是其子然後從父容器先移除兒童,並將其添加到舞臺上或其它影片剪輯這樣

VAR parent2 :MovieClip = new MovieClip(); function deleteChild(e:Event) {

refMc = parentMc.childMc;

addChild(refMc); //這將增加refMC到階段

OR

parent2.addChild(refMc); // this will add to another movieClip

this.removeChild(parentMc);

}

而且你的函數DeleteChild,則是剛剛從舞臺不會從內存中取出的兒童。在調用deleteChild函數後嘗試addChild(parentMc),您將同時獲得容器或addChild(refMc)將使Child進入舞臺。手段引用保留在內存中,以便您的影片剪輯在內存中,但不在舞臺上。因此除非將它們設置爲NULL,否則您的引用不會被刪除。

2

由於parentMc是在deleteChild函數之外定義的,所以parentMc不會被刪除,它只能從舞臺上刪除,因此childMc仍應可訪問。

在任何情況下,下面的代碼例如,你可以做這樣的事情:

 
var refMc:MovieClip; 
var container:MovieClip = new MovieClip(); 

// parentSymbol has childMc inside of it 
var parentMc:MovieClip = this.addChild(new parentSymbol()); 

function deleteChild(e:Event) 
{ 
    refMc = parentMc.childMc; 
    container.addChild(refMc); 

    this.removeChild(parentMc); 
}