0

ばかげているように聞こえるかもしれませんが、どうすれば明確な子供を舞台から外すことができますか? 例えば

function giveMeResult(e:MouseEvent):void
{

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

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

前の結果の上に 1 つの結果を追加します。

関数「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: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。

中に書くと:

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

何も起こらず、新しい子が前の子の上に追加されます。

ありがとうございます!!!結果は簡単です:)私がしなければならなかったのは、ステージから削除することなく、result.txtを変更することだけです:)

4

5 に答える 5

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.
于 2012-02-16T18:21:24.373 に答える
1

DisplayObjectContainer.contains()のドキュメントから:「孫、ひ孫などはそれぞれ true を返します。」

したがって、contains は、直接の子だけでなく、表示リストの任意の場所を意味します。あなたが望むのは、Manqueが指摘した親チェック、または単に結果をどこからでも削除することです:

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

奇妙なことに、addChild(result) はそれを以前の親から自動的に削除します。DisplayObject は一度に DisplayList 内の 1 つの場所にしか存在できないため、複数の結果が表示される理由がわかりません...

あなたが渡した「結果」は、すでにステージ上にある結果ではない可能性はありますか?

于 2012-02-16T19:17:48.383 に答える
1

あなたが何を望んでいるかを私が明確に理解している場合、このコードはあなたを助けることができます:

if (result.parent != null && result.parent == result.stage)
{
    // stage itself contains result
    result.parent.removeChild(result);
}
于 2012-02-16T18:52:40.443 に答える
0

やってみました?

MovieClip(root).removeChild(result)

[編集]

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

   stage.addChild(result); 
}
于 2012-02-16T19:06:22.243 に答える
0

私がしなければならなかったのは、ステージから削除せずに、result.txt を変更するだけです。

于 2012-02-17T10:41:18.050 に答える