No se puede eliminar al niño de la etapa - if (stATA.contains (child1)) {removechild (child1);} no funciona

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

  •  26-10-2019
  •  | 
  •  

Pregunta

Puede sonar estúpido, pero ¿cómo puedo eliminar a un niño definido del escenario? p.ej

function giveMeResult(e:MouseEvent):void
{

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

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

Agrega un resultado en la parte superior del anterior.

Quiero que la función "GIVEMERESULT: elimine el" resultado "si está en el escenario y agrega una nueva.

ACTUALIZAR:*El resultado es un TextField, y resultado.txt = "" Cambia de vez en cuando ...

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

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

cuando

result.parent.removeChild(result);

está escrito sin la declaración IF - da error TypeError: Error #1009: No se puede acceder a una propiedad o método de una referencia de objeto nulo.

Cuando se escribe dentro:

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

No pasa nada y se agrega un nuevo niño en la parte superior del anterior.

¡¡¡Gracias a todos!!! El resultado es simple :) Todo lo que tuve que hacer era cambiar el resultado. Txt sin siquiera eliminarlo del escenario :)

¿Fue útil?

Solución 5

Todo lo que tenía que hacer era simplemente cambiar el resultado. Txt sin siquiera eliminarlo del escenario

Otros consejos

Necesitas escribir stage.removeChild(result); y posteriormente stage.addChild(result);

Editar:

Mirando una función similar a la tuya:

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

    stage.addChild(result);
}

La única forma en que esto agregaría una nueva instancia del campo de texto result al escenario, sin eliminar el anterior, sería si el resultado ha cambiado. Vea este flujo de ejecución:

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 se entiende claramente lo que quieres, entonces este código puede ayudarte:

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

De los documentos para DisplayObjectContainer.Contains (): "Niños, bisnietos, etc. en cada regreso verdadero".

Entonces contiene medios en cualquier lugar de la lista de visualización, no solo niños directos. Lo que desea es que el Manque de control de los padres señalara, o simplemente para eliminar el resultado de cualquier lugar que pueda estar:

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

Aunque curiosamente, AddChild (resultado) lo eliminará automáticamente de su padre anterior: un DiscipeObject solo puede estar en un lugar en la lista de visualización a la vez, por lo que no estoy seguro de por qué está viendo múltiples resultados ...

¿Es posible que el "resultado" en el que ha pasado no es el resultado que ya está en el escenario?

¿Has probado?

MovieClip(root).removeChild(result)

EDITAR

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

   stage.addChild(result); 
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top