¿Quieres registrarte?

Aparecer elementos de una grilla hasta completarla con AS3

Por: nazcaline
23 de Febrero del 2009
1,282 visitas

Este código sirve para hacer aparecer elementos de una grilla al azar hasta completarla. Cuando me ví con este problema intenté hacerlo primero con un array normal pero, al buscar un método que me permitiera eliminar un elemento cualquiera (no sólo el último, con pop()) y al mismo tiempo actualizar los índices de los otros elementos, no lo encontré (será que no busqué bien :S).

Entonces me dí cuenta que la display list hacía todo este trabajo por mí y puse manos a la obra.

Lo que hace la función básicamente es escoger un child al azar de una display list y lo elimina, actualizando de esta manera el rango en que trabajará la función random. Al mismo tiempo, añade estos elementos en otro container.

En el código tienen comentarios que aclaran todo.

Espero les sirva, saludos.

Código :

//estos son los movieclips que usaremos como contenedores
var container1:MovieClip=new MovieClip();
addChild(container1);
var container2:MovieClip=new MovieClip(); 
addChild(container2);

//colocamos los cuadrados en una grilla, puede ser de tantas filas y columnas como deseen.
//al mismo tiempo, los colocamos dentro de container1.
for(var i:uint=0;i<6;i++)
{
   for(var u:uint=0;u<6;u++)
   {
      var b:box=new box();
      b.x=(b.width+10)*u;
      b.y=(b.height+10)*i;
      b.visible=false;
      container1.addChild(b);
   }
}

//esta es la función que hace todo funcionar. Le pasamos como parámetro los dos clips y la
//duración del efecto.
function appear(clip1:MovieClip,clip2:MovieClip,duration:Number):void
{
   var total:Number=clip1.numChildren;
   //este es la duracion entre cada apricion individual, simplemente dividimos la duracion
   //total entre el num de children del clip1
   var apptime:Number=duration*1000/total;
   //llamamos un timer con los datos que hemos obtenido
   var timer:Timer=new Timer(apptime,total);
   timer.addEventListener(TimerEvent.TIMER,onTimer);
   timer.start();
   //esta funcion es llamada periodicamente por el timer, tantas veces como cuadritos hayan
   //en la grilla
   function onTimer(evt:TimerEvent):void
   {
      //obtenemos un indice al azar del clip1, actualizandose en cada pasada de acuerdo al 
      //numChildren
      var index:uint=Math.floor((Math.random())*clip1.numChildren);
      //almacenamos ese child en una var temporal
      var tmp:DisplayObject=clip1.getChildAt(index);
      //borramos ese child del clip1, asi su display list se actualiza y su propiedad
      //numChildren tambien, a cada pasada tiene uno menos
      clip1.removeChildAt(index);
      //añadimos el child elegido al clip2 y lo hacemos visible
      clip2.addChild(tmp);
      tmp.visible=true;
   }
}
//llamamos la funcion
appear(container1,container2,2)

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3

Comentarios | Enviar un comentario
El metodo de la classe Array que buscas se llama splice, lo que hace es remover elementos y agregarlos

Código :


var array:Array = new Array("uno", "dos", "tres", "cuatro");

array.splice(2, 1);

trace(array);//uno, dos, cuatro

array.splice(2, 0, "tres");

trace(array);//uno, dos, tres, cuatro



http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html#splice()
Saludos
Por: Cep
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.