Comunidad de diseño web y desarrollo en internet online

carga secuencial aleatoria de movieclips sin que se repitan

Citar            
MensajeEscrito el 08 Jun 2007 01:36 pm
Hola a todos!!! Es la primera vez que ingreso al foro, de antemano gracias por su ayuda!
Estoy haciendo una carga aleatoria de movieclips en diferentes frames, pero necesito que no se repitan(una vez que ha salido un clip, que no vuelva a salir). Con el siguiente código estoy haciendo la carga aleatoria, lo cual hasta allí me funciona:

createEmptyMovieClip("loaderJugador_mc",4);

loaderJugador_mc._x=286;
loaderJugador_mc._y=248;

loaderJugador_mc.attachMovie("jugador"+(Math.floor(Math.random()*3 + 1)),jugador,20);

Intenté aplicarlo a movieclips duplicados que que lanzan una variable cuando se cargan m=1, y en el frame coloco que duplico clip si m=0. Asì cuando se han cargado una vez, en el frame se evalua esta variable y como ya està en m=1, no se vuleven a cargar. Pero no pude combinar esto con el código anterior con el cual hago el random de clips.

Espero me puedan dar ideas, muchas gracias!

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 08 Jun 2007 04:50 pm
Bienvenido menazul.
Primero de todo, aunque cuando tienes varios movieClips en diferentes fotogramas sólo se ven los del fotograma actual, cuando los creas o los cargas por actionscript no están vinculados para nada a ningún fotograma. O sea, si tu attachas un movieclip desde action script en el fotograma 1, este se verà igualmente en qualquier fotograma. Lo que puedes hacer es que cuando el lector pase al siguiente fotograma borre el clip que habia cargado.

Visto esto és mejor no tener varios fotogramas en tu caso. Lo que puedes hacer para el problema de que salen los clips repetidos, és crear una array con los clips que vas a cargar dispuestos aleatoriamente:

Código :

var clips:Array = new Array("clip1_id", "clip2_id", "clip3_id");
function cargaMovie () {
   num = Math.floor (Math.random () * clips.length);
   attachMovie ("clip" + num, "jugador" + num, getNextHighestDepth ());
   clips = clips.slice (0, num).concat (clips.slice (num+1));
}

Recuerda que si creas un clip con un nombre de instancia ya utilizado o con una profundidad ocupada, el clip antiguo se borra.

Espero que te sirva

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 08 Jun 2007 05:18 pm
Muchas gracias por tu ayuda Ferranpujol!
Voy a probarlo...

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 08 Jun 2007 05:21 pm
Si no funciona dimelo que ya que me he puesto...;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 09 Jun 2007 01:42 pm
hola Ferranpujol!

No pude escribir de nuevo ayer, necesito tu ayuda para que me expliques "con plastilina", a ver qué puede estar mal pues no me funcionó. No se cargan los clips. Te pregunto: el código lo coloco en un frame y en este caso "clip1_id" es el identificador que coloco en la ventena de vinculación? Y en el caso de la palabra "jugador" (escrita en el còdigo de ejemplo), es el nombre para renombrar los clips?

Yo necesito que de 10 clips distintos que voy a tener (adversarios que atacan), se realice una carga aleatoria de modo que vayan saliendo uno por uno pero no se repitan).

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 09 Jun 2007 02:34 pm
Buenas, el código lo puedes meter donde quieras. No te iba porque el códiga tenía algún error, sorry. Ahí va:

Código :

var clips:Array = new Array ("clip0_id", "clip1_id", "clip2_id");
function cargaMovie () {
   num = Math.floor (Math.random () * clips.length);
   object = new Object ();
   object._x = Math.random () * Stage.width;
   object._y = Math.random () * Stage.height;
   _root.attachMovie (clips[num], "jugador" + num, getNextHighestDepth (), object);
   clips = clips.slice (0, num).concat (clips.slice (num + 1));
}


Ahora lo explico:
Esta array nos sirve para almacenar los id's (si, de la ventana vinculación) de los clips que aún no han sido cargados. El codigo coge una id aleatoriamente de esta array. Al principio hay todos los id's, i cada vez que se carga uno, se elimina de la array para que no se vuelva a cargar.

Código :

var clips:Array = new Array ("clip0_id", "clip1_id", "clip2_id");

Ahora guradamos un número aleatorio que nos servirá para determinar que clip cargar. (ojo, este número no representa el numero del nombre de la id a cargar, sinó la posición de la array de donde se va a coger dicha id)

Código :

num = Math.floor (Math.random () * clips.length);

El siguiente objeto nos sirve para pasar propiedades al clip creado. Esto ya te lo modificaràs a tu gusto.

Código :

object = new Object ();
object._x = Math.random () * Stage.width;
object._y = Math.random () * Stage.height;

Ahora vamos a cargar el clip. Debemos ejecutar la funcion attachMovie con la ruta donde queremos que cargue el clip, podemos tener este código en otra parte i cargar un clip en otra. Ej: en vez de _root.attachMovie... podemos poner _parent.escenario.attachMovie...
El primer parámetro le dice de donde coje la id del clip a cargar. El segundo el nombre de instancia que va a recibir. El tercero la profundidad i el último el objeto de donde va a heredar las propiedades.

Código :

_root.attachMovie (clips[num], "jugador" + num, getNextHighestDepth (), object);

Y ahora sólo falta eliminar el id cargado de la lista para que no vuelva a ser cogido.

Código :

clips = clips.slice (0, num).concat (clips.slice (num + 1));
}
Espero que ahora si te sirva...;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 09 Jun 2007 05:27 pm
Muchas gracias!!!

Voy a revisarlo, no te he podido escribir inmediatamente por lo que estoy sin internet en mi computer...
Voy a probar y te cuento màs tarde còmo me fue...

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 12 Jun 2007 05:36 am
hola ferranpujol!

No he podido que me funcione, no me carga nada... tal vez sólo es cuestión de la forma precisa en que debo colocar los valores de las propiedades del clip. Te agradezco me des un ejemplo, colocando en este mismo código algún valor para la posición del clip (x , y) y spara su profundidad.

Gracias!

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 17 Jun 2007 10:34 am
No, si no carga nada, no es problema del objeto con el que le pasamos propiedades al movieclip cargado. Seguramente debe ser un problema con las rutas a los clips etc... Si me passas el fla, a lo mejor te puedo ayudar, pero si no, es bastante dificil.

PD: Perdona el retraso pero esque estaba de viaje.

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 19 Jun 2007 01:43 am
Hola,
lo que pasa es que no es cuestión de algo particular de mi archivo, pues he probado el código en un .fla nuevo donde sólo coloco el código en un frame y unos movieclips con cualquier gráfico identificados (e la ventana de vinculación), como clip0_id, clip1_id, clip2_id, y no me funciona. No se carga nada. Te agradezco que si a tí te funciona me envíes el .fla de tu ejemplo y luego yo vería cómo lo aplico al jueguito.

Thanks!

Por menazul

7 de clabLevel



Genero:Femenino  

Cali - Colombia

msie
Citar            
MensajeEscrito el 19 Jun 2007 03:56 pm
Ok, a mi si me funciona, te ha mandado el fla al correo que sale en tu perfil...¿no hay otra forma de enviartelo que no sea así ni colgandolo en mi server (gratis i mierda)?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie

 

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