Impossible de retirer l'enfant de la scène - si (stage.contains (child1)) {removeChild (child1);} ne fonctionne pas

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

  •  26-10-2019
  •  | 
  •  

Question

Il peut sembler stupide, mais comment puis-je supprimer un enfant défini de la scène? par exemple.

function giveMeResult(e:MouseEvent):void
{

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

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

il ajoute un résultat sur le dessus de la précédente.

Je veux que la fonction « giveMeResult: supprimer « résultat » si est sur la scène et ajouter un nouveau

.

Mise à jour: * résultat est un champ de texte, et result.txt = « » changements de temps en temps ...

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);

est écrit sans instruction if - donne l'erreur TypeError:. Erreur # 1009: Impossible d'accéder à une propriété ou une méthode d'une référence d'objet null

écrit à l'intérieur:

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

rien ne se passe et nouvel enfant est ajouté au sommet de la précédente.

Merci à tous !!! Le résultat est simple :) Tout ce que je devais faire est tout simplement le changement result.txt sans même retirer de la scène:)

Était-ce utile?

La solution 5

Tout ce que je devais faire, il est tout simplement le changement result.txt sans même retirer de la scène

Autres conseils

Vous devez taper stage.removeChild(result); puis stage.addChild(result);

Edit:

En regardant une fonction similaire à la vôtre:

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

    stage.addChild(result);
}

La seule façon cela ajouterait une nouvelle instance de la result TextField à la scène, sans enlever l'ancien, serait si le résultat a changé. Voir ce flux d'exécution:

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.

Si je suis bien compris ce que vous voulez, alors ce code peut vous aider à:

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

Avez-vous essayé?

MovieClip(root).removeChild(result)

[EDIT]

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

   stage.addChild(result); 
}
scroll top