load aleatorio
2 seguidores
Recurro a su sabiduría porque esta vez si que no tengo ni idea de qué hacer.
Simple, quiero cargar un swf aleatorio cada que se cargue mi movie así que hice lo siguiente:
nombre = ["portada1.swf", "portada2.swf", "portada3.swf"];
dir = "portadas/";
i = nombre.length;
k = Math.floor(Math.random()*i);
loadMovie(dir+nombre[k], posicion);
Y luego puse un boton para recargar la movie de modo que se vea otra portada.
Hasta ahí todo bien... pero sucede que por el hecho de ser tan pocos archivos, muchas veces sale el mismo dos o hasta tres veces continuas.
¿Como puedo evitar este problema?
Espero puedan ayudarme.
Muchas gracias. Saludos. :D
XrV
a ver, lo que puedes hacer es guardar una variable temporal con la última pelicula cargada, veamos como lo vamos a hacer.
ahora mismo tenemos este code:
<code>
nombre = ["portada1.swf", "portada2.swf", "portada3.swf"];
dir = "portadas/";
i = nombre.length;
k = Math.floor(Math.random()*i);
loadMovie(dir+nombre[k], posicion);
</code>
lo que vamos a hacer es a encapsularlo en una función (más practico, más reusable)
<code>nombre = ["portada1.swf", "portada2.swf", "portada3.swf"];
dir = "portadas/";
i = nombre.length;
function cargaPeli(){
k = Math.floor(Math.random()*i);
loadMovie(dir+nombre[k], posicion);
}</code>
bien, ahora lo que vamos a hacer es a modificar nuestra función cargaPeli para que nos guarde una variable temporal con la ID (por decir de algun modo la K) y un while para que mientras la k actual sea igual a la antigua nos vaya generando una hasta que sea distinta:
<code>nombre = ["portada1.swf", "portada2.swf", "portada3.swf"];
dir = "portadas/";
i = nombre.length;
oldK=0;
function cargaPeli(){
k = Math.floor(Math.random()*i);
while(oldK==k){
k = Math.floor(Math.random()*i);
}
oldK=k;
loadMovie(dir+nombre[k], posicion);
}</code>
como podeis ver solo hemos añadido un par de líneas de codigo:
Explicación:
while(oldK==k){
"Mientras oldK sea igual a k"
esto significa que mientras esas dos variables sean iguales ejecutará el código que tiene entre sus claves (no se si es una buena explicación del while pero bueno, al vuelo)
k = Math.floor(Math.random()*i);
esto ya sabemos que es
}
cerramos while
oldK=k;
ahora que k no es igual que oldK, definimos esta última para que tenga el valor de k para la siguiente vez que lo carguemos
ejemplo con trace de k:
1
0
2
1
0
2
0
2
0
1
0
1
0
2
1
ala, ni una seguida :P
poco más que decir :)
un saludito a todos los amigos de los niños :P
Usuario desconocido
Tus aportaciones son buenisimas XrV y creo que este forum gana mucho en calidad gracias a tu presencia y colaboracion (ahora no te hagas el longi....;))
un pregunta como has definido que el random + no reptetir varialble se limite a tres valores ( 0,1,2) no lo veo o es algo que sale automaticamente?
chanok
:D mil, mil gracias.
XrV
Visdelou
Tus aportaciones son buenisimas XrV y creo que este forum gana mucho en calidad gracias a tu presencia y colaboracion (ahora no te hagas el longi....;))
jajajjaa... no soy el único que se gana el merito, haylos que llevan MUCHO más tiempo y mucha más ayuda en el foro para que le reconozcan el merito que yo, pero bueno, me divierto montando ejemplos y eso que queda muy mono y a veces ayuda más una imagen que mil palabras (bueno, gracias a mis maestros por ayudarme en el largo camino de la sabiduria blba bl lbalblablabl :P:P:P)
Visdelou
un pregunta como has definido que el random + no reptetir varialble se limite a tres valores ( 0,1,2) no lo veo o es algo que sale automaticamente?
la variable i la define chanok con la longitud del array nombre:
i = nombre.length;
de este modo si la array fuese más larga no tendríamos que modificar nada del script aparte del array
Math.floor(Math.random()*i);
Math.floor redondea un valor hacia abajo (si fuese 4.8 lo dejaria como 4)
Math.random devuelve un valor entre 0 y 1, si multiplicamos ese valor por otro se obtiene un decimal entre 0 y ese valor que hemos definido (redondeado para abajo con el floor)
pues eso, un saludito y feliz lunes :) (he estado en andorra y de camino nos hemos encontrado la plantación de marihuana más enorme que he visto en mi vida, al menos media el campo 1km x medio km. .. muy fuerte, esta semana aportaré material gráfico XD) lo malo es que no recuerdo donde era :(