Das Kind kann nicht aus der Stufe entfernt werden - if (Stage.Contains (Child1)) {removeChild (Child1);} funktioniert nicht

StackOverflow https://stackoverflow.com/questions/9316758

  •  26-10-2019
  •  | 
  •  

Frage

Es mag dumm klingen, aber wie kann ich ein definitives Kind von der Bühne entfernen? z.B

function giveMeResult(e:MouseEvent):void
{

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

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

Es fügt ein Ergebnis oben auf dem vorherigen hinzu.

Ich möchte, dass die Funktion "givemeresult:" Ergebnis "entfernen, wenn sich auf der Bühne befindet und eine neue hinzufügt.

AKTUALISIEREN:*Das Ergebnis ist ein Textfeld und Ergebnis.txt = "" ändert sich von Zeit zu Zeit ...

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

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

Wenn

result.parent.removeChild(result);

wird ohne Anweisung geschrieben - gibt Fehler an TypeError: Fehler #1009: Zugriff auf eine Eigenschaft oder Methode einer Null -Objektreferenz nicht.

Wenn im Inneren geschrieben:

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

Nichts passiert und neues Kind wird oben auf dem vorherigen hinzugefügt.

Dank an alle!!! Das Ergebnis ist einfach :) Alles, was ich tun musste, ist einfach das Ergebnis zu ändern.

War es hilfreich?

Lösung 5

Ich musste nur das Ergebnis ändern.

Andere Tipps

Sie müssen tippen stage.removeChild(result); und folglich stage.addChild(result);

Bearbeiten:

Betrachten Sie eine ähnliche Funktion wie Sie:

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

    stage.addChild(result);
}

Die einzige Möglichkeit, dies zu einer neuen Instanz des Textfelds hinzuzufügen result Auf der Bühne, ohne das alte zu entfernen, wäre es, wenn sich das Ergebnis geändert hat. Siehe diesen Ausführungfluss:

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.

Wenn ich klar verstanden werde, was Sie wollen, kann dieser Code Ihnen helfen:

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

Von den Dokumenten für DisplayObjectContainer.contains (): "Enkelkinder, Urenkel und so bei jeder Rückkehr wahr."

Enthält also Mittel überall auf der Anzeigeliste, nicht nur direkte Kinder. Was Sie wollen, ist, dass der übergeordnete Check Manque darauf hingewiesen hat oder einfach nur von jedem Ort entfernen kann:

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

Seltsamerweise entfernen AddChild (Ergebnis) es automatisch von seinem vorherigen übergeordneten übergeordneten. Ein DisplayObject kann jeweils nur an einem Ort in der Displaylist sein. Ich bin mir also nicht sicher, warum Sie mehrere Ergebnisse sehen ...

Ist es möglich, dass das "Ergebnis", in dem Sie bestanden haben, nicht das Ergebnis ist, das bereits auf der Bühne liegt?

Hast du es versucht?

MovieClip(root).removeChild(result)

BEARBEITEN

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

   stage.addChild(result); 
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top