Impossibile rimuovere bambino dal palco - se (stage.contains (child1)) {removeChild (child1);} non funziona
-
26-10-2019 - |
Domanda
Può sembrare stupido, ma come posso rimuovere un bambino definita dal palco? per es.
function giveMeResult(e:MouseEvent):void
{
if(stage.contains(result))
{removeChild(result);}
addChild(result); // this part works fine, but it adds one over another
}
si aggiunge un risultato sulla parte superiore di quello precedente.
Voglio la funzione "giveMeResult: per rimuovere 'risultato', se è sul palco e aggiungere uno nuovo
.UPDATE: * risultato è una TextField e result.txt = "" cambia di volta in volta ...
trace (result.parent); /// gives [object Stage]
trace (result.stage); /// gives[object Stage]
trace (result.parent != null && result.parent == result.stage); // gives true
quando
result.parent.removeChild(result);
è scritto senza if - dà l'errore TypeError:. Error # 1009: Non è possibile accedere a una proprietà o un metodo di un riferimento oggetto null
quando scritto all'interno:
if (result.parent !=null && result.parent == result.stage)
{
result.parent.removeChild(result);
}
non succede nulla e viene aggiunto nuovo figlio sulla parte superiore di quello precedente.
Grazie a tutti !!! Il risultato è semplice :) Tutto quello che dovevo fare è solo il cambiamento result.txt senza nemmeno rimuoverlo dal palco:)
Soluzione 5
Tutto quello che dovevo fare è solo il cambiamento result.txt senza nemmeno rimuoverlo dal palco
Altri suggerimenti
È necessario digitare stage.removeChild(result);
e successivamente stage.addChild(result);
Modifica:
Guardando una funzione simile al vostro:
private function func(e:Event) : void {
if(stage.contains(result)) {
stage.removeChild(result);
}
stage.addChild(result);
}
L'unico modo questo potrebbe aggiungere una nuova istanza della result
TextField allo stadio, senza rimuovere quello vecchio, sarebbe se il risultato è cambiato. Vedere questo flusso di esecuzione:
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.
Se sono chiaramente capito quello che vuoi, allora questo codice può aiutare a:
if (result.parent != null && result.parent == result.stage)
{
// stage itself contains result
result.parent.removeChild(result);
}
Dalla documentazione di DisplayObjectContainer.contains () : " nipoti, pronipoti, e così via ogni return true"
Quindi, contiene mezzi in qualsiasi punto della lista di visualizzazione, non solo i bambini diretti. Ciò che si vuole è il controllo genitore Manque sottolineato, o semplicemente per rimuovere risultato da qualsiasi punto potrebbe essere:
if (result.parent) {result.parent.removeChild(result); }
Anche se stranamente, addChild (risultato) rimuoverà automaticamente dal suo genitore precedente - un DisplayObject può essere solo in un posto nel DisplayList alla volta, quindi non sono sicuro perché si sta vedendo più risultati ...
E 'possibile che il "risultato" aver superato in non è il risultato che è già sul palco?
Hai provato?
MovieClip(root).removeChild(result)
[EDIT]
function giveMeResult(e:MouseEvent):void{
if(result.parent != null && result.parent == result.stage){
stage.removeChild(result);
}
stage.addChild(result);
}