2011-08-11 42 views
1

的孩子,如果im全光照功能的MC添加到舞台,像这样:AS3 stage.addChild/stage.removeChild <<必须呼叫者

var myChild:MC= new MC(); 

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

但是当我尝试删除MC:

stage.removeChild(myMC) 

我得到提供的DisplayObject必须是调用者错误的子... 任何建议或变通?

回答

2

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

+0

Ric,确保你知道你在做什么,当你使一个displayobject不可见时。请阅读[本文](http://www.developria.com/2008/11/visible-false-versus-removechi.html),了解alpha,visible和removeChild之间的详细分类。 –

6

如果项目在舞台上,您的代码应该可以工作。也许,象这样一个条件语句限定它:

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

另外,您可以使用下面的代码,但它可能不是最好的做法。

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

它再次运作,谢谢,虽然我overmas有一个有趣的点隐藏和showin – Ric

1

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

如果(myMC.parent)myMC.parent.removeChild(myMC);

3

问题不在于removeChild。这是与显示列表。如果您检查displayobject的父属性,当您调用“removeChild”时,它将为空。

它为什么会成为空可能是因为很多原因的:

  • 家长是孩子之前归零。
  • 孩子或父母有事件侦听器,不会让他们死亡。
  • 显示对象实际上不是您要删除的实例。这一点可以非常棘手的发现。 在调用removeChild时,查看您试图删除的变量的“名称和父属性”。
0

我可以解决这个问题,只需删除我添加到该对象的每个EventListeners,然后再删除它。