asd

20

Feb

Desordenar un array random en flash 8

Publicado por: LeoBaraldi

Nuestro amigo Maximiles nos hace llegar otra duda con respecto a la galería de imagenes que usa un array para mostrar las fotos, la inquietud de el es que cada vez que ingresen al sitio vea las fotos de manera diferente con respecto a su orden.

Para ellos simplemente vamos a usar un prototipo en este caso para la clase Array que se encargara de recorrer nuestros elementos y desacomodarlos y volver el mismo array con diferente orden entre sus indices.

Escribimos el prototipo, en el primer frame como siempre de nuestra peli principal.

Actionscript:
  1. Array.prototype.random = function() {
  2. var len = this.length;
  3. var temp = new Array();
  4. for (var i = 0; i<len; i++) {
  5. var ran = Math.round(Math.random()*(this.length-1));
  6. temp[i] = this[ran];
  7. this.splice(ran, 1);
  8. }
  9. for (var j = 0; j<len; j++) {
  10. this[j] = temp[j];
  11. }
  12. };

Y simplemente para usarlo seria asi: (despues que creamos o mandamos los datos al array)

Actionscript:
  1. misFotos_array.random();

Así quedaria el codigo de nuestra galeria con este nuevo agregado:

Actionscript:
  1. //Aqui indicamos que use codificasión, por si hay caracteres como ñ, acentos o cosas raras
  2. System.useCodepage = true;
  3. //la carpeta que tiene nuestras fotos, con un nombre medio cambiado por si ya tenemos otra
  4. //carpeta llamada imagenes
  5. var fotos:String = "gal/";
  6. //velocidad del efecto entre fotos
  7. var fade:Number = 35;
  8. //primera foto a cargar
  9. var iniciarFoto:Number = 0;
  10. //tiempo que se va a mostrar
  11. var tiempo:Number = 100;
  12. //contador fade
  13. var controlFade:Number = 0;
  14. //contador de tiempo
  15. var controlTiempo:Number = 0;
  16. //creamos un objeto xml porque en definitiva el php nos devolvera un xml
  17. miXML = new XML();
  18. miXML.ignoreWhite = true;
  19. miXML.onLoad = function(ok) {
  20. if (ok) {
  21. misFotos_array = this.firstChild.childNodes;
  22. misFotos_array.random();
  23. _root.createEmptyMovieClip("contenedor1_mc", 10);
  24. _root.createEmptyMovieClip("contenedor2_mc", 20);
  25. contenedor1_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
  26. iniciarFoto++;
  27. contenedor2_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
  28. contenedor2_mc._alpha = 0;
  29. curr_mc = 1;
  30. onEnterFrame = function () {
  31. if (curr_mc == 1) {
  32. controlTiempo++;
  33. if (controlTiempo>=tiempo) {
  34. curr_mc = 2;
  35. cambio = "IN";
  36. }
  37. }
  38. if (curr_mc == 2) {
  39. if (cambio == "IN") {
  40. contenedor2_mc._alpha += 100/fade;
  41. if (contenedor2_mc._alpha>=100) {
  42. contenedor2_mc._alpha = 100;
  43. cambio = "FIJO";
  44. controlTiempo = 0;
  45. iniciarFoto++;
  46. if (iniciarFoto == misFotos_array.length) {
  47. iniciarFoto = 0;
  48. }
  49. contenedor1_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
  50. }
  51. }
  52. if (cambio == "FIJO") {
  53. controlTiempo++;
  54. if (controlTiempo>=tiempo) {
  55. cambio = "OUT";
  56. }
  57. }
  58. if (cambio == "OUT") {
  59. contenedor2_mc._alpha -= 100/fade;
  60. if (contenedor2_mc._alpha<=0) {
  61. contenedor2_mc._alpha = 0;
  62. curr_mc = 1;
  63. controlTiempo = 0;
  64. iniciarFoto++;
  65. if (iniciarFoto == misFotos_array.length) {
  66. iniciarFoto = 0;
  67. }
  68. contenedor2_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
  69. }
  70. }
  71. }
  72. };
  73. }
  74. };
  75. //la url de nuestro PHP que crea un xml
  76. miXML.load(fotos+'lista.php');
  77. //
  78. Array.prototype.random = function() {
  79. var len = this.length;
  80. var temp = new Array();
  81. for (var i = 0; i
  82. var ran = Math.round(Math.random()*(this.length-1));
  83. temp[i] = this[ran];
  84. this.splice(ran, 1);
  85. }
  86. for (var j = 0; j
  87. this[j] = temp[j];
  88. }
  89. };

Como pueden ver al prototype lo puse al final, no hay problema porque el flash tiene un orden de lectura y siempre lee las funciones y prototipos antes de seguir ejecutando el resto del codigo, pero lo mejor es ponerlo al principio asi les queda mas facil y mas ordenado sobretodas las cosas.

categorias: Prototipos Coment.: 10

10 Respuestas

    maximiles Dice:

    Hola de nuevo, para agregar....
    una vez que termina el array (linea 65) comienza con el mismo orden por lo tanto antes de asignarle el valor 0 a iniciar foto, le aplicamos de nuevo el prototype random al nuestro array desordenado.
    misFotos_array.random();

    Damian Dice:

    Hola Leo.
    Ojo, que flash no lee primero los prototipos como si fueran funciones. Al tener que igualarlo Flash lo toma como una línea mas.
    Array.prototype.random = function()

    En el ejemplo te funcionaria, porque tenes una carga de un XML, lo cual es asincrónico, lo que le da tiempo al flash a leer la línea 78.

    También encuentro errores en los bucles del prototipo. Se ve que hubo algún problema cuando coloreaste el código.

    LeoBaraldi Dice:

    Hola Damian!!! pense que asi hera, como siempre todos los dias se aprense algo nuevo!! como siempre usted un capo!! con el bucle me anda bien ami pero lo voy a controlar aver que ondin.
    Gracias che por tus comentarios! :)

    Gaston Dice:

    Hola yo nuevamente, ya lo solucione, el orden tiene que ser 01.png, 02.png ...10.png etc.
    Ahora si lo ordena correctamente.
    SAludos

    David Dice:

    Hola!!
    Muy bueno el tutorial. Solo que a mí no me ha funcionado el RANDOM... Me arroja un error de sintaxis. Estoy usando unas fotos muy grandes... ¿Será posible poner una precarga antes de cada transición?

    Saludos!

    Noel Dice:

    Cordiales saludos,
    ¿Cómo hago para crear de un botón una matriz? es decir yo he creado un botón llamado circulo quiero hacer 100 de ese circulo pero en una matriz circulo(i). Que cuando seleccione de una lista el número de circulos a aparecer. haga algo como for (i=0; i

    DIEGGO Dice:

    Necesito hacer una pelicula flash con varios rompecabezas, utilizando random pero que las imagenes cargadas en los diferentes clips esten sincronizadas cada vez que se entre

    LeoBaraldi Dice:

    Dieggo no entiendo la pregunta!!!

    Armando Obando Dice:

    Hola. me puedes mandar el archivo de flash 8 pa probarlo porfavor... te lo agradeceria. bendiciones.

    iidd Dice:

    ok, cuando copie el actionscript me arrojo error de salida, asi copio esto sin lineas, saludos

    Array.prototype.random = function() {
    var len = this.length;
    var temp = new Array();
    for (var i = 0; i<len; i++) {
    var ran = Math.round(Math.random()*(this.length-1));
    temp[i] = this[ran];
    this.splice(ran, 0);
    }
    for (var j = 0; j=tiempo) {
    curr_mc = 2;
    cambio = "IN";
    }
    }
    if (curr_mc == 2) {
    if (cambio == "IN") {
    contenedor2_mc._alpha += 100/fade;
    if (contenedor2_mc._alpha>=100) {
    contenedor2_mc._alpha = 100;
    cambio = "FIJO";
    controlTiempo = 0;
    iniciarFoto++;
    if (iniciarFoto == misFotos_array.length) {
    iniciarFoto = 0;
    }
    contenedor1_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
    }
    }
    if (cambio == "FIJO") {
    controlTiempo++;
    if (controlTiempo>=tiempo) {
    cambio = "OUT";
    }
    }
    if (cambio == "OUT") {
    contenedor2_mc._alpha -= 100/fade;
    if (contenedor2_mc._alpha<=0) {
    contenedor2_mc._alpha = 0;
    curr_mc = 1;
    controlTiempo = 0;
    iniciarFoto++;
    if (iniciarFoto == misFotos_array.length) {
    iniciarFoto = 0;
    }
    contenedor2_mc.loadMovie(fotos+misFotos_array[iniciarFoto].attributes.name);
    }
    }
    }
    };
    }
    };
    //la url de nuestro PHP que crea un xml
    miXML.load(fotos+'lista.php');
    //

Publicar comentario

IMPORTANTE: Los comentarios son moderados. A la brevedad seran subidos.

Leonardo David Baraldi

Leonardo Baraldi

Nací en Villa Carlos Paz, tengo 33 años y me dedico a desarrollos para la web desde el año 99, preferentemente en las aéreas de ActionScript y CSS. Trabajo para la firma Manifesto Solutions como jefe de producción.

ultimos post

Usa Firefox es mejor che!!!
Copyright © 2008 LeoBaraldi. Todos los derechos reservados.
Designed by LeoBaraldi and powered by Wordpress | RSS Feed
Love WordPress
Manifesto
Manifesto solutions
Sponsort Oficial de LeoBaraldi