我有一个movieclip(childMc),它是舞台上另一个movieclip(parentMc)的孩子。我的代码为舞台上的子动画片段创建一个引用(refMc),然后通过调用函数deleteChild删除前一个父动画片段(parentMc)。问题是删除也删除了引用。如何打破参考,以便将参考(refMc)保留在舞台上?这是我的代码:
舞台代码:
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);
}
任何帮助都将不胜感激。
答案 0 :(得分:2)
好吧,删除父级将从舞台中删除所有的孩子。 有两种方法可以处理这种情况
1 - 如果要删除父项而不删除其子项,请先从父容器中删除子项,然后将其添加到阶段或其他类似的MovieClip中
var parent2:MovieClip = new MovieClip(); function deleteChild(e:Event) {
refMc = parentMc.childMc;
的addChild(refMc); //这会将refMC添加到舞台
OR
parent2.addChild(refMc); //这将添加到另一个movieClip
this.removeChild(parentMc);
}
你的函数deleteChild只是从舞台上删除子节点而不是从内存中删除。在调用deleteChild函数后尝试addChild(parentMc),你将获得容器或者addChild(refMc)将使Child进入阶段。意味着引用保留在内存中,因此你的影片剪辑在内存中但不在舞台上。因此,除非将影片剪辑设置为NULL
,否则不会删除影片剪辑答案 1 :(得分: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); }