Impossibile rimuovere bambino dal palco - se (stage.contains (child1)) {removeChild (child1);} non funziona

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

  •  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:)

È stato utile?

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); 
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top