Comunidad de diseño web y desarrollo en internet online

Eliminar un Objeto con removeChild

Citar            
MensajeEscrito el 24 Mar 2009 05:51 am
Hola , estoy atascadísima en una parte de una aplicación que estoy haciendo en Flex con AC3.
Tengo un panel en el que el usuario va añadiendo objetos a través de la función addChild, hasta ahí bien. Los objetos son una clase personalizada con un texto y que heredan de Image.
Mi problema es a la hora de eliminar los objetos. Lo hago de la siguiente forma:

al crearlo hago:
miPanel.addChild(obj);
obj.addEventListener(MouseEvent.CLICK,quitarObjetoMapa)

y para eliminarlo se llama a la función del listener:

public function quitarObjetoMapa(event:MouseEvent):void
{
miPanel.removeChild(miPanel.getFocus())
}

La función quitar tiene comparadores para saber si tiene que borrarlo en función de tener pulsado un botón, pero lo he simplificado porque el resto funciona bien y no influye en mi problema. He probado también con miPanel.removeChild(this)

Pero siempre me da el mismo error:

ArgumentError: Error #2025: El objeto DisplayObject proporcionado debe ser un elemento secundario del llamador.
at flash.display::DisplayObjectContainer/removeChild()

Creo que tengo errores de concepto, pero no se muy bien cuales, algo he leído por ahí de Sprite pero no entiendo nada.
Ayudarme por favor!

Gracias

Por anoukmi

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 24 Mar 2009 07:50 am
El error te da porque espera como argumento un DisplayObject -o cualquier objeto -MC, Shape, Sprite, etc. que extienda de la Clase DisplayObject-
Cuando hacemos un

Código ActionScript :

obj.addEventListener(MouseEvent.CLICK,quitarObjetoMapa)

La función es de la forma

Código ActionScript :

public function quitarObjetoMapa(event:MouseEvent):void{
....
}

dentro de la función, la propiedad target de la variable event, vamos event.target, hace referencia al Objeto sobre el que se hace el click. Así pues sería

Código ActionScript :

public function quitarObjetoMapa(event:MouseEvent):void{
   miPanel.removeChild(event.target)
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2009 01:14 am
lo acabo de probar pero me da el siguiente error de compilación :(

1118: Conversión implícita de un valor con tipo estático Object a un tipo flash.display:DisplayObject posiblemente no relacionado.

Por anoukmi

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Mar 2009 08:41 am
trata de hacer una "conversión de cast"

Código ActionScript :

 miPanel.removeChild(DisplayObject(event.target)) 

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2009 12:46 am
lo he probado pero me sigue dando error ahora el primero
El objeto DisplayObject proporcionado debe ser un elemento secundario del llamador.

Por anoukmi

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Mar 2009 10:27 pm
Aqui voy con mi cuchara... hahaha bien ANOUKMI a mi me sucedio lo mismo no podia remover un MC que estaba dentro de otro MC bueno eran varios y por aqui en los foros me pasaron este codigo:

function remover() {
var total:Number = holder_thums.numChildren-1;
for (var j:Number = total; j>=1; j--) {
holder_thums.removeChildAt(j);
}
}

realice una funcion remover lo que hace es que le digo que mita todos los objetos dentro de mi MC HOLDER_THUMS ya tengo tengo ese valor hago un for como veras y uso el REMOVECHILDAT a ver si esto te funciona

suerte!!

Por ldgmmorales

Claber

142 de clabLevel

1 tutorial

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Mar 2009 07:37 am
Idgmmorales te da el código para eliminar TODOS los MCs interiores a uno. Pero eso no es lo que quieres hacer.
Anoukmi, el error te dice que estamos tratando de eliminar un displatyObject de miPanel pero que ese displayObject NO está dentro de miPanel.
Puede ser
1.-Que miPanel no tenga valor
2.-Que event.target sea un Mc que NO esté en miPapel -puede que esté en un MC que sí que está en el Panel-

Así que para saberlo haz un "trace" de event.target para ver qué valor tiene

Código ActionScript :

public function quitarObjetoMapa(event:MouseEvent):void{ 
   trace(event.target)
   trace(miPanel)  //<--por asegurarnos que tiene valor
   miPanel.removeChild(event.target) 
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Mar 2009 09:19 pm
SOLUCIONADO!

Gracias a los 2, sin vuestra ayuda no lo habría conseguido.
Probé lo que me dijiste ldgmmorales y con el índice si me funcionaba, también probé lo que decías tu Eliseo2 con el trace y llegué a la conclusión que el problema era que el event.target recoge el componente del que esta compuesto a su vez el objeto osea un text area, de ahí que el compilador diga "El objeto DisplayObject proporcionado debe ser un elemento secundario del llamador."

Así que hice lo siguiente:

Código :

obj.addEventListener(MouseEvent.CLICK, seleccionaObjeto)
 


Código :

var indexObjSelect:int = -1;
public function seleccionaObjeto(event:MouseEvent):void
{
   indexObjSelect = miPanel.getChildIndex(event.target.parent);
}


El botón para eliminar llama a:

Código :

public function quitarObjetoMapa():void
{
        if ( indexObjSelect != -1 )  //hay un objeto seleccionado
        {
                miPanel.removeChildAt(indexObjSelect);
                indexObjSelect = -1;
        }
}

Por anoukmi

21 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Abr 2010 07:53 pm
un poquito tarde, pero al que le pueda interesar. Tenía el mismo problema, es más simple (o por lo menos a mi me funciono asi)

var clip:MovieClip = MovieClip(e.currentTarget);
clip.parent.removeChild(clip);

eso remueve el elemento que clickeaste

Por Juan4Ever

1 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.