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 ).
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)
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Cep el 24 de Marzo de 2009
Código :
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html#splice()
Saludos
Por Martin el 05 de Abril de 2012
Por Mara el 02 de Agosto de 2012