Movies Clips aleatorios en Flash
6 seguidores
Holas, desde ya muy agradecido si puede ayudarme con esto:
Tengo un .fla que tiene distintos movie clips con animaciones dentro y van apareciendo y cambiando pero no aleatoriamente, sino que linealmente cuando termina uno le doy una orden para que pase a otro, como esto por ejemplo:
<code>_parent.portada3.gotoAndPlay(2);</code>
Bueno ahora lo que yo quiero es con un código que haga random() y puedan pasar aleatoriamente de una a otro aleatoriamente y en la medida de lo posible que no se repitan los movies.
He buscado como hacerlo pero no encuentro exactamente eso.
Si alguien puede ayudarme con ese código se lo agradezco.
Si no se entiende algo o me falta algún dato me avisan : )
demssite
A ver entiendo que portada3 es unos de esos movieclips, es decir tendrías portada1, portada2...
Puedes crear un array con esos clips y decirle que llame a un random del array. Cuando llames a un objeto de ese array marcalo con un tag=1 (usado), antes inicializa ese tag en todos a 0. Cuando llames al array comprueba si el clip que seleccionó aleatoriamente ya se usó, si es así que busque otro.
leos
sí portada3 es uno de esos mc.
Entiendo conceptualmente, voy a aprender a hacer un array y luego te cuento.
¡Gracias por tu ayuda!
Ventd'Aval
lo facil:
_parent["portada"+random(10)].gotoAndPlay(2);
(eso teniendo portada0, portada1... portada9)
Pero se te repetiran... para evitarlo es un pelin mas codigo:
<code>
//creamos un array
var miarray=new Array();
//metemos los clips al array
miarray.push(_parent.portada0);
miarray.push(_parent.portada1);
miarray.push(_parent.portada2);
//etc...
//desordenamos el array
function unsort (a,b) {
return 1-random(3);
}
miarray.sort(unsort);
//quitamos el ultimo clip del array y lo reproducimos:
miarray.pop().gotoAndPlay(2);</code>
Salut :)
demssite
Eso Leos tu haz caso a Mr Cay que de esto pilota bien...
Un saludo
leos
Ventd'Aval
lo facil:
_parent["portada"+random(10)].gotoAndPlay(2);
(eso teniendo portada0, portada1... portada9)
Oh guau! genial esto funcionó! gracias!
Ahora, abusando de tu gran ayuda.
Si uso este código en el primer frame del fla para hacer el random en el inicio y le quito el _parent me da un error de sintaxis ¿Cómo sería ese code? :oops:
Ventd'Aval
Pero se te repetiran... para evitarlo es un pelin mas codigo:
<code>
//creamos un array
var miarray=new Array();
//metemos los clips al array
miarray.push(_parent.portada0);
miarray.push(_parent.portada1);
miarray.push(_parent.portada2);
//etc...
//desordenamos el array
function unsort (a,b) {
return 1-random(3);
}
miarray.sort(unsort);
//quitamos el ultimo clip del array y lo reproducimos:
miarray.pop().gotoAndPlay(2);</code>
¿Este código lo pongo en el primer frame del .fla o en cada mc cuando hace random?
Bueno muchas gracias nuevamente, tremendo lo tuyo, gracias por tu tiempo.
Ventd'Aval
leos
Si uso este código en el primer frame del fla para hacer el random en el inicio y le quito el _parent me da un error de sintaxis ¿Cómo sería ese code?
si tus clips estan en ese timeline, seria asi:
this["portada"+random(10)].gotoAndPlay(2);
leos
....
¿Este código lo pongo en el primer frame del .fla o en cada mc cuando hace random?
en el primer frame del timeline donde esten puestos tus clips....
luego, cada vez que quieras que se reproduzca un clip aleatorio, desde el timeline haces el:
miarray.pop().gotoAndPlay(2);
eso hasta que miarray.length sea cero (el array estara ya vacio, osea, habras reproducido todos los clips).
Si quisieses reproducir un clip aleatorio desde otro clip (por ejemplo al final del timeline de ese clip), pones, dentro del clip en el ultimo frame:
_parent.miarray.pop().gotoAndPlay(2);
Espero se entienda, que mezclar codigo con timeline siempre es un poco enredado ;)
leos
Ventd' sin duda tienes muy buena onda.
Te paso como he puesto el código ahora
En el primer frame de la escena 1 (Hay una escena anterior con un cargando):
<code>//creamos un array
var miarray=new Array();
//metemos los clips al array
miarray.push(this.portada0);
miarray.push(this.portada1);
miarray.push(this.portada2);
miarray.push(this.portada3);
miarray.push(this.portada4);
//etc...
//desordenamos el array
function unsort (a,b) {
return 1-random(3);
}
miarray.sort(unsort);
//quitamos el ultimo clip del array y lo reproducimos:
miarray.pop().gotoAndPlay(2);</code>
Eso parece funcionar pero repite más que antes los mc y además una vez que reproduce esa animación ahí queda para siempre, de hecho no hace un fade out final..
luego de ese fade inserto en un frame:
<code>_parent.miarray.pop().gotoAndPlay(2); </code>
pero como que no lo leyera y se queda siempre en el primer mc que cargó.
Bueno te agradezco infinitamente tu tiempo y entenderé si no puedes responder esto también.
Seguiré mientras tanto entender si estoy haciendo otra cosa mal.
Ventd'Aval
Como te ha ido? ayer estuve un poco liado ^^
Lo importante es que el primer codigo lo ejecutes solo una vez (sino iras rellenando el array cada vez), osea, que si el codigo esta en el frame 1, no pases denuevo por ese frame...
Y quizas para que tengas menos problemas con rutas, this, _parents, etc... (zarate, si estas aqui, no leas lo siguiente ^^) crea el array en el ambito global... osea:
_global.miarray=new Array();
_global.miarray.push(....
...
Y luego desde donde quieras:
_global.miarray.pop().gotoAndPlay(2);
Saludos...
leos
Bien, un poco mejor!, disculpa que no lo dejé dicho ¡qué grande, liado y preocupándote por el laburo de otros! buena onda eh.
Tocando, tocando mejoró : ) se repite cada tanto pero ya, igual me avisaron que iba a trabajar un programador con esos flash así que le pasaré la pelota e él para que lo ajuste, para algo es un programador especializado ¿no?
Desde ya, nuevamente grazieee por tu ayuda y tiempo, me ha servido mucho también para aprender cositas nuevas.
Usuario desconocido
Quizás mejor si usas Math.random, el random antiguo no se usa mucho.
Ventd'Aval
random(3)-1
vs
Math.floor(Math.random()*3)-1
¿porque es mejor? ^^
Usuario desconocido
Porque en AS3 random ha sido eliminado :-P
<fieldset>
http://livedocs.adobe.com/flex/2/langref/migration.html
Removed. Use Math.random() instead.
</fieldset>
Ventd'Aval
yaya, pero estamos hablando de AS2... en todo caso pa AS3 yo ya tengo mi include con funciones molonas tal que:
<code>function random(n:int):int {
return Math.floor(Math.random()*n);
}</code>
talibanes, que soys unos talibanes!, compraos algun libro de maeda y dejadme tranquilo con mi random()!! :P
Usuario desconocido
Según leí yo no se donde, el random() de toda la vida hacía mas repeticiones que el Math.random... por eso lo dije. Además tu eres dios en AS y yo soy diseñador que es menos que nada. :P
Ventd'Aval
Apostaria a que no ^^.... pero bueno, si quieres un argumento de verdad, random(10) es como 10 veces mas rapido que Math.floor(Math.random()*10)
:P
Usuario desconocido
Y para conseguir un número aleatorio entre 0 y 1 Math.random( ) es mucho más rápido y te devuelve más decimales que por ejemplo un
<code>random( 1000 ) / 1000</code>
lo que te devolvería un número aleatorio entre 0 y 1 con 4 decimales.
Así que hay casos y casos, que no todo son enteros en la viña del señor :-P
Ventd'Aval
100% de acuerdo ;)
esro75
Hola chicos!
Perdon que los moleste, se que el post es viejo pero estoy en un aprieto con proyecto que tiene algo de programación en el viejo action script 2 y de manera muy rudimentaria ya que utilizo Flash pero para animación de objetos simples, en otras palabras soy casi nulo en el tema de código, así que quería recurrir a sus amplios conocimientos para que me orienten. Te cuento
Tengo un botón que llamara a 22 movie clips o videos de poca duración dentro de una misma línea de tiempo. Lo que quiero lograr es que al clickear me lleven al fotograma especifico donde están alojada cada movie clip, que el mismo se reproduzca y vuelva al botón inicio ubicado en el frame 1 de nuestra línea de tiempo.
Bien, pero además necesito que estos 22 clips aparezcan de manera aleatoria cada vez que clickeo el botón principal, que los clips no sigan el orden numérico se entiende,? Te copio el código del botón que hice con Action Script 2 que es lo único que se mas o menos manejar
on(rollOver){
gotoAndPlay(2);
}
Me he metido en infinidad de foros, pero verdaderamente ponen ejemplos de random o Math.random en AS3 para esta parte de funciones aleatorias de objetos pero verdaderamente me parecieron muy complejos, esto para mi ya lo es.
Espero que puedan iluminarme¡¡ verdaderamente estoy perdido con esto,
Gracias y Saludos
MAXer3D
Usando la función randRange:
on(press){
donde = randRange(1,22);
gotoAndPlay(donde );
}
MAXer3D
No salió el link: http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00001220.html
esro75
Hola MAXer3D! Gracias por tu respuesta, aplique el codigo que enviaste pero no salio.
El código que genere en base a lo que me enviaste quedo así
on(rollOver){
3 =randRange(1,22);
gotoAndPlay(3);
}
en donde 3 es el numero fotograma donde hay uno de estos 22 clips. Necesito que, mediante alguna función y luego de reeproducirse dicho clip, vuelva a este Unico Boton que esta en el frame 1, y que cada vez que clickeo que sea aleatorio.
Mil gracias igual amigo!