Comunidad de diseño web y desarrollo en internet online

vaciar el contenido de Sprite para volver a usarlo

Citar            
MensajeEscrito el 24 Jun 2009 07:42 pm
Hola,


Espero que podais ayudarme. Estoy haciendo un sitio en flash Cs4 con AS3.
El sitio es por etiquetas y contiene 5 secciones.

En cada etiqueta estoy poniendo el codigo AS correspondiente a ese frame. Todo lo estoy metiendo en un solo contenedor general. POr ej, en la seccion uno pongo:

contrGeneral = new Sprite();
addChild(contGeneral);

var seccion4:Sprite = new Sprite();
contGeneral.addChild(seccion4);
seccion4.x =200;
seccion4.y= -100;

y añado el contenido de esa seccion, y asì sucesivamente con las otras secciones.
El problema es que al pasar de una etiqueta a la otra, quiero vacial el contenido de "contenedorGeneral" para agregarle el de la nueva seccion. He empleado la tecnica siguiente en cada una de las etiquetas:

removeChild(contGeneral);

y nuevamente lo creo y leañado el contenido de la seccion de la etiqueta en donde estoy:
contGeneral = new Sprite();
addChild(contGeneral);

Aparentemente funciona, pero al brincar especificamente de la etiqueta 5 a la 2 me sale el siguiente error:

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.


No entiendo porque si todo esta metido en el contenedor general que tambien pongo el removeChild en la etiqueta donde me sale el error.
Alguien tiene idea de lo que pasa? :?

O en su defecto. como puedo remover los contenedores por ejemplo si paso de la seccion 3 a la 5? he usado e lremoveChild(nombre de la seccion) lo he intentado. Pero al iniciar la pagina, si brinco por ej de la 3 a la 5 y en esa seccion tiene remover el contenedor de la seccion 2, me sale error ya que como no he visitado la seccion2 ese contenedor NO existe, por lo tanto me diceque no puedo intentar quitar uncontenedor que no existe.

Alguna sugerencia? :?

Por MyMelody_mc

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jun 2009 06:34 am
Yo tendría una única variable (que sea de la clase de documento) "seccion"

Código ActionScript :

var seccion:Sprite; //<---la declaro fuera
//igualmente
var contrGeneral = new Sprite();
addChild(contGeneral);

....en tu función de los botones
function seccion1(e:Event){
      //usamos la variable "seccion"
      if (seccion!=null) {  //<--si la variable es distinto de null
           contrGeneral.removeChild(seccion);
      }
      seccion=new Sprite(); //<--o new ClaseDeLoQueSea()
      seccion.x=200
      seccion.y=400
      contrGeneral.addChild(seccion)
}

En AS.3 es importante tener variables que "hacen referencia a". En este caso, la variable seccion hace referencia, cuando pulsamos el boton1 a la seccion1, cuando pulsemos el botón 2 a la sección 2, etc., pero es LA MISMA variable

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jun 2009 02:53 pm
Muchas gracias! Voy a probarlo,
Saludos!!!
^^

Por MyMelody_mc

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jun 2009 03:35 pm
Puedes crearte una funcion para vaciar contenedores. En tu caso Sprite.

Código ActionScript :

public function vaciar(contenedor:Sprite):void{
        var n:int = contenedor.numChildren;
        for(var j = n; j > 0;j--){
   contenedor.removeChildAt(j);
        }
}

Si mal no recuerdo, sólo tienes que tener en cuenta que la j que va recorriendo los hijos, no llegue a cero, pues se borraría a sí mismo, en este caso en que he puesto que n es el número total de hijos.

Por Noja33

21 de clabLevel



Genero:Masculino  

Sevilla

msie7
Citar            
MensajeEscrito el 25 Jun 2009 03:43 pm

Noja33 escribió:

Puedes crearte una funcion para vaciar contenedores. En tu caso Sprite.

Código ActionScript :

public function vaciar(contenedor:Sprite):void{
        var n:int = contenedor.numChildren;
        for(var j = n; j > 0;j--){
   contenedor.removeChildAt(j);
        }
}

Si mal no recuerdo, sólo tienes que tener en cuenta que la j que va recorriendo los hijos, no llegue a cero, pues se borraría a sí mismo, en este caso en que he puesto que n es el número total de hijos.


Bueno, podrías crearte una pequeña clase, y en vez de recibir un Sprite que reciba un DisplayObjectContainer para que te sirva para otros contenedores.

Por Noja33

21 de clabLevel



Genero:Masculino  

Sevilla

firefox
Citar            
MensajeEscrito el 26 Jun 2009 02:39 pm
Hola y gracias por responder. Solo otra pregunta. Como llamo la funcion vaciar? es decir con qué argumentos?

vaciar();


:oops:

Por MyMelody_mc

3 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jul 2009 02:24 pm
Tienes que pasarle como argumento, el objeto contenedor que quieras vaciar.

Por Noja33

21 de clabLevel



Genero:Masculino  

Sevilla

firefox

 

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