无法从舞台上移除儿童 - 如果(stage.contains(child1)){removeChild(child1);}不起作用

时间:2012-02-16 18:18:21

标签: actionscript-3 removechild

这可能听起来很愚蠢,但我怎样才能从舞台上移除一个明确的孩子? e.g。

function giveMeResult(e:MouseEvent):void
{

if(stage.contains(result))
    {removeChild(result);}

    addChild(result); // this part works fine, but it adds one over another
}

它在前一个的顶部添加了一个结果。

我希望功能“giveMeResult:删除”结果“如果在舞台上并添加一个新结果。

更新: * 的 结果是TextField,result.txt =“”不时变化......

trace (result.parent); /// gives  [object Stage]
trace (result.stage); /// gives[object Stage]

trace (result.parent != null && result.parent == result.stage); // gives true

result.parent.removeChild(result);

是在没有if语句的情况下编写的 - 给出错误 TypeError:错误#1009:无法访问空对象引用的属性或方法。

写在里面时:

if (result.parent !=null && result.parent == result.stage)
{
result.parent.removeChild(result);
}

没有任何反应,并且在前一个孩子的顶部添加了新的孩子。

感谢所有人! 结果很简单:) 我所要做的就是改变result.txt,甚至不用从舞台上删除它:)

5 个答案:

答案 0 :(得分:2)

您需要输入stage.removeChild(result);,然后输入stage.addChild(result);

编辑:

查看与您类似的功能:

private function func(e:Event) : void {
    if(stage.contains(result)) {
        stage.removeChild(result);
    }

    stage.addChild(result);
}

这将向舞台添加TextField result的新实例而不删除旧实例的唯一方法是,如果结果已更改。请参阅此执行流程:

var result : TextField = new TextField();

// An event occurs and func get's called.
// now result will be added to stage.

result = new TextField();

// An event occurs and func get's called again
// This time the stage.contains(..) will return false, since the current result
// is not actually on stage. This will add a second TextField to the stage.

答案 1 :(得分:1)

如果我清楚地了解您的需求,那么此代码可以帮助您:

if (result.parent != null && result.parent == result.stage)
{
    // stage itself contains result
    result.parent.removeChild(result);
}

答案 2 :(得分:1)

来自DisplayObjectContainer.contains()的文档:“孙子,曾孙等等每一个都回归真实。”

因此,包含显示列表中的任何位置,而不仅仅是直接子项。你想要的是Manque指出的父检查,或者只是从任何地方删除结果:

if (result.parent) {result.parent.removeChild(result); }

虽然奇怪的是,addChild(result)会自动将其从前一个父项中删除 - 一次DisplayObject只能位于DisplayList中的一个位置,所以我不确定为什么你会看到多个结果......

你传入的“结果”是否可能不是舞台上的结果?

答案 3 :(得分:0)

你试过吗?

MovieClip(root).removeChild(result)

[编辑]

function giveMeResult(e:MouseEvent):void{
  if(result.parent != null && result.parent == result.stage){
    stage.removeChild(result);
  }

   stage.addChild(result); 
}

答案 4 :(得分:0)

我所要做的就是改变result.txt,甚至不用从舞台上删除它