删除as3中的movieclip引用

时间:2010-10-11 14:02:21

标签: flash actionscript-3

我有一个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);
  }

任何帮助都将不胜感激。

2 个答案:

答案 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);
}