AS3 stage.addChild / stage.removeChild<<必须是来电者的孩子

时间:2011-08-11 21:23:43

标签: actionscript-3 removechild addchild displayobject

如果我正在使用功能将mc添加到舞台,如下所示:

var myChild:MC= new MC();

function somefunc()
{
   stage.addChild(myMC)
}

但是当我尝试删除mc时:

stage.removeChild(myMC)

我得到提供的DisplayObject必须是调用者错误的子代... 任何建议或解决方法?

5 个答案:

答案 0 :(得分:6)

如果项目在舞台上,您的代码应该有用。也许用条件语句对其进行限定:

if (myMC.stage != null)
   stage.removeChild(myMC);

或者您可以使用以下代码,但这可能不是最佳做法。

if (myMC.parent != null)    
   myMC.parent.removeChild(myMC);

答案 1 :(得分:3)

问题不在于removeChild。这是与displaylist。如果检查displayobject的parent属性,当你调用“removeChild”时它将为null。

为什么它变为null可能是由于很多原因:

  • 父母在孩子面前被取消。
  • 孩子或父母的事件听众不会让他们死亡。
  • 显示对象实际上不是您要删除的实例。找出这个可能非常棘手。 在调用removeChild 时,查看您尝试删除的变量的“名称和父属性”。

答案 2 :(得分:2)

如果可能,您可以尝试隐藏并显示movieClip。 我认为它比删除和添加一致,代码允许的速度快一点。 请记住,这只是一个建议,一个比我聪明的人能够帮助你...

答案 3 :(得分:1)

您也可以使用此故障安全:

  

if(myMC.parent)myMC.parent.removeChild(myMC);

答案 4 :(得分:0)

我可以通过简单地删除添加到该对象的每个EventListener来删除它之前解决这个问题。