¿Quieres registrarte?

Clase para transiciones de fotos en Flash

Por: Zguillez
17 de Septiembre del 2006
7273 de clabLevel
Otros artículos de Zguillez
121,764 visitas

Con esta sencilla clase podemos crear fácilmente un pase de fotografías tan fantástico como este.

El código de la clase sería el siguiente:

Código :

class LoopIMG {
   private var ruta:MovieClip;
   private var listaFotos:Array;
   private var tiempo:Number;
   private var contenedor:MovieClip;
   private var paseDeFotos:Number;
   private var foto:Number;
   //-------------------------
   public function LoopIMG(queRuta) {
      ruta = queRuta;
      contenedor = ruta.createEmptyMovieClip("contenedor1", ruta.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor1", contenedor.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor2", contenedor.getNextHighestDepth());
      listaFotos = new Array();
      setTiempo(2000);
      foto = 0;
      //
      contenedor.precarga = new MovieClipLoader();
      contenedor.listener = new Object();
      contenedor.precarga.addListener(contenedor.listener);
      contenedor.listener.onLoadComplete = function(cont:MovieClip) {
         cont.onEnterFrame = function() {
            if (this._alpha < 100) {
               this._alpha += 10;
            } else {
               delete this.onEnterFrame;
            }
         };
      };
   }
   public function setTiempo(queTiempo) {
      tiempo = queTiempo;
   }
   public function setPosicion(queX, queY) {
      contenedor._x = queX;
      contenedor._y = queY;
   }
   public function start() {
      contenedor.contenedor2._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], contenedor.contenedor2);
      paseDeFotos = setInterval(this, "SiguienteImagen", tiempo);
   }
   public function stop() {
      clearInterval(paseDeFotos);
   }
   public function push(queURL) {
      listaFotos.push(queURL);
   }
   //--------------------
   private function SiguienteImagen() {
      (foto < (listaFotos.length - 1)) ? foto++ : foto = 0;
      var cont:MovieClip = contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth() - 2);
      cont.swapDepths(contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth() - 1));
      cont._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], cont);
   }
}

*No hace falta decir que este código hay que insertarlo dentro de un archivo actionscript con el nombre "LoopIMG.as ", y añadirlo a la carpeta de clases AS2...

El uso de la clase es simple:

1- Creamos la instancia de la clase
var fondoLoop:LoopIMG = new LoopIMG(this);

2- Situamos el clip en la posición (x, y) que nos interese
fondoLoop.setPosicion(100, 50);

3- Añadimos las URL de las fotografias que contendrá el pase de fotos
fondoLoop.push("foto1.jpg");
fondoLoop.push("foto2.jpg");
fondoLoop.push("foto3.jpg");
fondoLoop.push("foto4.jpg");
fondoLoop.push("foto5.jpg");


4- Indicamos el tiempo (en milisegundos) de espera entre foto y foto
fondoLoop.setTiempo(3000);

5- Comenzamos la reproducción del pase de fotos
fondoLoop.start();

Y listo!

Hay que decir que podemos parar el pase en cualquier momento con:
fondoLoop.stop()

Espero les sirva...
^^

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript

Comentarios | Enviar un comentario
Está muy bien pero puestos a mejorarla:

zguillez :

3- Añadimos las URL de las fotografias que contendrá el pase de fotos
fondoLoop.push("foto1.jpg");
fondoLoop.push("foto2.jpg");
fondoLoop.push("foto3.jpg");
fondoLoop.push("foto4.jpg");
fondoLoop.push("foto5.jpg");

Tener que hacer esto (incluso con un bucle) resulta incómodo. Y como las fotos tendrán casi siempre la forma cadena+numero, y puede que haya n fotos puedes hacer una funcion cargar secuencia mas o menos así:

Código :

function cargarSecuencia(queRaiz:String,queExtension:String,NInicial:Number){
...
}


Siento dejarla inacabada pero... :zombie: Intentaaré hacerlo mañana.
Por: Zah
Tambien se puede ampliar la clase con una función que añada lsa fotos desde un xml:

Código :

   public function pushXML(queXML:String) {
      var ruta = this;
      var xmlFotos:XML = new XML();
      xmlFotos.ignoreWhite = true;
      xmlFotos.load(queXML);
      xmlFotos.onLoad = function(success:Boolean) {
         if (success) {
            var xmlNodo:XML = this.firstChild;
            var total:Number = xmlNodo.childNodes.length;
            for (var i:Number = 0; i < total; i++) {
               ruta.listaFotos.push(xmlNodo.childNodes[i].firstChild.nodeValue);
            }
         }
      };
   }

con un xml así:

Código :

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<album>
<imagen>foto1.jpg</imagen>
<imagen>foto2.jpg</imagen>
<imagen>foto3.jpg</imagen>
<imagen>foto4.jpg</imagen>
<imagen>foto5.jpg</imagen>
</album>

Código :

fondoLoop.pushXML("fotos.xml");

Por: Zguillez

zah :

Está muy bien pero puestos a mejorarla:

zguillez :

3- Añadimos las URL de las fotografias que contendrá el pase de fotos
fondoLoop.push("foto1.jpg");
fondoLoop.push("foto2.jpg");
fondoLoop.push("foto3.jpg");
fondoLoop.push("foto4.jpg");
fondoLoop.push("foto5.jpg");

Tener que hacer esto (incluso con un bucle) resulta incómodo. Y como las fotos tendrán casi siempre la forma cadena+numero, y puede que haya n fotos puedes hacer una funcion cargar secuencia mas o menos así:

Código :

function cargarSecuencia(queRaiz:String,queExtension:String,NInicial:Number){
...
}


Siento dejarla inacabada pero... :zombie: Intentaaré hacerlo mañana.



Es posiblemente uno de los comentarios más ineficientes que he visto. Estas hablando en serio? :|

Como te contesta Zquillez el método puedes emplearlo como más te plazca, vamos que es un mero array nada más! Tú nutrele los datos como mejor te parezca! ^^
Por: Hernán
Está cool Zguillez (Y). Muy útil, te felicito ^^
Por: XKlibur

Hernan :

Es posiblemente uno de los comentarios más ineficientes que he visto. Estas hablando en serio?


Erghhh de hecho no parece mala la idea.

Ahora zah. Segun lo poco que leí, las fotos no tienen que llevar una secuencia.

Zguillez no necesariamente tienes que crear otro metodo, puedes usar el mismo push y que verifique que tipo de parametro recibe. Si tiene la extension xml que lo lea sino que lo incluya directamente. Solo es una idea, puede haber otras mejores.

Otra cosa, es que falta el metodo pop y remove, por si quiero quitar alguna foto. El primero actuaria como cualquier metodo pop que elimina la ultima posicion y remove que borre una en especifico.

Una critica al codigo, es el espanglish que usas. No se ve bien que mezcles ingles y español en los identificadores de metodo, propiedades, etc. Usa una de los dos idiomas pero no los dos.

Por ejemplo:
setTiempo = setTime
setPosicion = setPosition
siguienteImagen = next

En fin son solo ideas.

saludos
Por: Maikel
Me suelen gustar los comentarios que pones zah, pero a veces criticar por criticar lleva a hacer un comentario como ese...
Por: falis

falis :

Me suelen gustar los comentarios que pones zah, pero a veces criticar por criticar lleva a hacer un comentario como ese...

No creo que la intención de zas fuera criticar por criticar... (por lo menos no suele hacerlo)
:wink:

He ampliado unos cuantos metodos para controlar el array de fotos:
fondoLoop.pop("foto.jpg")
fondoLoop.shift("foto.jpg")
fondoLoop.unshift("foto.jpg")
fondoLoop.trace()
// realiza un trace del contenido del array
fondoLoop.clear() // borra el contenido del array
fondoLoop.remove(2) // Elimina una foto del array segun la posición
fondoLoop.remove("foto1.jpg") // Elimina una foto del array a partir del nombre

Tambien he modificado la funcion push() para que reconozca que tipo de datos le metemos. Las posivilidades son:
-un Array
-un Xml
-o archivo (jpg, tif...)

Aqui les dejo el código:

Código :

class LoopIMG {
   private var ruta:MovieClip;
   private var listaFotos:Array;
   private var tiempo:Number;
   private var contenedor:MovieClip;
   private var paseDeFotos:Number;
   private var foto:Number;
   //-------------------------
   public function LoopIMG(queRuta) {
      ruta = queRuta;
      contenedor = ruta.createEmptyMovieClip("contenedor1", ruta.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor1", contenedor.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor2", contenedor.getNextHighestDepth());
      listaFotos = new Array();
      setTiempo(2000);
      foto = 0;
      //
      contenedor.precarga = new MovieClipLoader();
      contenedor.listener = new Object();
      contenedor.precarga.addListener(contenedor.listener);
      contenedor.listener.onLoadComplete = function(cont:MovieClip) {
         cont.onEnterFrame = function() {
            if (this._alpha<100) {
               this._alpha += 10;
            } else {
               delete this.onEnterFrame;
            }
         };
      };
   }
   public function setTiempo(queTiempo) {
      tiempo = queTiempo;
   }
   public function setPosicion(queX, queY) {
      contenedor._x = queX;
      contenedor._y = queY;
   }
   public function start() {
      contenedor.contenedor2._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], contenedor.contenedor2);
      paseDeFotos = setInterval(this, "SiguienteImagen", tiempo);
   }
   public function stop() {
      clearInterval(paseDeFotos);
   }
   public function push(queDato) {
      switch (typeof (queDato)) {
      case "string" :
         var extension:String = queDato.substr(queDato.length-3, 3);
         switch (extension) {
         case "xml" :
            var ruta = this;
            var xmlFotos:XML = new XML();
            xmlFotos.ignoreWhite = true;
            xmlFotos.load(queDato);
            xmlFotos.onLoad = function(success:Boolean) {
               if (success) {
                  var xmlNodo:XML = this.firstChild;
                  var total:Number = xmlNodo.childNodes.length;
                  for (var i:Number = 0; i<total; i++) {
                     ruta.listaFotos.push(xmlNodo.childNodes[i].firstChild.nodeValue);
                  }
               }
            };
            break;
         default :
            listaFotos.push(queDato);
            break;
         }
         break;
      case "object" :
         listaFotos = queDato;
         break;
      }
   }
   public function pop(queURL) {
      listaFotos.pop(queURL);
   }
   public function shift(queURL) {
      listaFotos.shift(queURL);
   }
   public function unshift(queURL) {
      listaFotos.unshift(queURL);
   }
   public function trace() {
      trace(listaFotos);
   }
   public function remove(queDato) {
      switch (typeof (queDato)) {
      case "number" :
         var temp1:Array = listaFotos.slice(0, queDato-1);
         var temp2:Array = listaFotos.slice(queDato, listaFotos.length);
         listaFotos = temp1.concat(temp2);
         break;
      case "string" :
         for (var num in listaFotos) {
            if (listaFotos[num] == queDato) {
               remove(Number(num)+1);
            }
         }
         break;
      }
   }
   public function clear() {
      listaFotos = [];
   }
   //--------------------
   private function SiguienteImagen() {
      (foto<(listaFotos.length-1)) ? foto++ : foto=0;
      var cont:MovieClip = contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth()-2);
      cont.swapDepths(contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth()-1));
      cont._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], cont);
   }
}


PD: si, lo del espanglish debería mirarmelo... :oops:
Por: Zguillez
Exelente de verdad no puedo creer tanto conocimento que a qui se expresa, ademas de muy facil implementar esta clase es muy efectiva y util XD
Por: jomajudo_blog
Vayamos por partes:
Primero, aquí la clase con la función que prometí:

Código :

class LoopIMG {
   private var ruta:MovieClip;
   private var listaFotos:Array;
   private var tiempo:Number;
   private var contenedor:MovieClip;
   private var paseDeFotos:Number;
   private var foto:Number;
   private var i:Number = 0;
   public var arrComplete:Function;
   //-------------------------
   public function LoopIMG(queRuta) {
      ruta = ruta == undefined ? _root : queRuta;
      contenedor = ruta.createEmptyMovieClip("contenedor1", ruta.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor1", contenedor.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor2", contenedor.getNextHighestDepth());
      listaFotos = new Array();
      setTiempo(2000);
      foto = 0;
      //
      contenedor.precarga = new MovieClipLoader();
      contenedor.listener = new Object();
      contenedor.precarga.addListener(contenedor.listener);
      contenedor.listener.onLoadComplete = function(cont:MovieClip) {
         cont.onEnterFrame = function() {
            if (this._alpha<100) {
               this._alpha += 10;
            } else {
               delete this.onEnterFrame;
            }
         };
      };
   }
   public function loadSec(queRaiz:String, queExtension:String, NInicial:Number) {
      if (NInicial != undefined) {
         i = NInicial;
      }
      var raiz = queRaiz;
      var ext = queExtension;
      var str:String = queRaiz+i+queExtension;
      var ldr = contenedor.precarga;
      var scope = this;
      contenedor.precarga.loadClip(str, contenedor.contenedor2);
      contenedor.precarga.onLoadStart = function(mc) {
         ldr.unloadClip(mc);
         scope.loadSec(raiz, ext);
         scope.i++;
         scope.listaFotos.push(str);
      };
      contenedor.precarga.onLoadError = function(mc, error) {
         if (error == "URLNotFound") {
            scope.contenedor.precarga.onLoadStart = null;
            trace(scope.listaFotos.shift());
            scope.arrComplete();
         }
      };
   }
   public function setTiempo(queTiempo) {
      tiempo = queTiempo;
   }
   public function setPosicion(queX, queY) {
      contenedor._x = queX;
      contenedor._y = queY;
   }
   public function start() {
      contenedor.contenedor2._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], contenedor.contenedor2);
      paseDeFotos = setInterval(this, "SiguienteImagen", tiempo);
   }
   public function stop() {
      clearInterval(paseDeFotos);
   }
   public function push(queDato) {
      switch (typeof (queDato)) {
      case "string" :
         var extension:String = queDato.substr(queDato.length-3, 3);
         switch (extension) {
         case "xml" :
            var ruta = this;
            var xmlFotos:XML = new XML();
            xmlFotos.ignoreWhite = true;
            xmlFotos.load(queDato);
            xmlFotos.onLoad = function(success:Boolean) {
               if (success) {
                  var xmlNodo:XML = this.firstChild;
                  var total:Number = xmlNodo.childNodes.length;
                  for (var i:Number = 0; i<total; i++) {
                     ruta.listaFotos.push(xmlNodo.childNodes[i].firstChild.nodeValue);
                  }
               }
            };
            break;
         default :
            listaFotos.push(queDato);
            break;
         }
         break;
      case "object" :
         listaFotos = queDato;
         break;
      }
   }
   public function pop(queURL) {
      listaFotos.pop(queURL);
   }
   public function shift(queURL) {
      listaFotos.shift(queURL);
   }
   public function unshift(queURL) {
      listaFotos.unshift(queURL);
   }
   public function trace() {
      trace(listaFotos);
   }
   public function remove(queDato) {
      switch (typeof (queDato)) {
      case "number" :
         var temp1:Array = listaFotos.slice(0, queDato-1);
         var temp2:Array = listaFotos.slice(queDato, listaFotos.length);
         listaFotos = temp1.concat(temp2);
         break;
      case "string" :
         for (var num in listaFotos) {
            if (listaFotos[num] == queDato) {
               remove(Number(num)+1);
            }
         }
         break;
      }
   }
   public function clear() {
      listaFotos = [];
   }
   //--------------------
   private function SiguienteImagen() {
      (foto<(listaFotos.length-1)) ? foto++ : foto=0;
      var cont:MovieClip = contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth()-2);
      cont.swapDepths(contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth()-1));
      cont._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], cont);
   }
}



Aquí un ejemplo de uso:

Código :

import LoopIMG;
a = new LoopIMG(_root);
a.loadSec("img", ".jpg", 1);
a.arrComplete = function() {
   trace(a.trace());
   a.start();
};


hernan :

Es posiblemente uno de los comentarios más ineficientes que he visto. Estas hablando en serio?

hernan, habiendo leído bastantes posts tuyos, este me ha sorprendidido mucho. ¿Realmente te paraste a analizar lo que escribí y lo que escribiste tú? ¿Estás hablando en serio?
Creo que expliqué bien qué utilidad le veía a lo que había propuesto, pero por si no es así, aquí va un ejemplo práctico:

Soy un fotógrafo, quiero usar la clase c00l de Zguillez para hacer un pase de mis fotos para mi web. Y quiero ir añadiendo fotos a medida que las haga. Tengo varias opciones, o cada vez que pongo una foto nueva modificar el código de AS y volver a subir el swf al servidor o me hago una función ue compruebe si existen, o un xml, que también es buena idea. La primera es insufriblemente incómoda, y las otras dos requieren conocimientos mucho mayores que los que se esperan de un fotógrafo (o diseñador o lo que sea).
De hecho, a mí (que no me considero un novato con flash) ¡me costó un buen rato hacer que funcionara!

Y en cuánto a esto:

Zguillez :

falis :

Me suelen gustar los comentarios que pones zah, pero a veces criticar por criticar lleva a hacer un comentario como ese...

No creo que la intención de za[h] fuera criticar por criticar... (por lo menos no suele hacerlo)
:wink:


Muchas gracias por la confianza ^^ pero este es un troll al que conozco personalmente y rogaría que tratasen de ignorarlo. De todas formas espero que nadie piense que mi opinión era criticar o desmeritar el trabajo de Zguillez, que me parece excelente.
Por: Zah
Alguien se curraria un pause?

Por si queremos deleitarnos con una imagen en concreto.
Por: makeguen_blog
Za[h]... gracias por el aporte. Realmente no habia pensado en esa opción. Pensaba que te referias a introducir en el array una serie de fotos por bucle (por ejemplo de foto1 a foto 50...). Pero el hecho de que automaticamente te reconozca el numero final de la secuencia puede ser muy util en ciertos casos (como el que comentas) (y)

Modifiqué la funcion para darle estas dos opciones:

Código :

   public function loadSec(queRaiz:String, queExtension:String, queNum:Number, queFin:Number) {
      var num = queNum;
      var raiz = queRaiz;
      var ext = queExtension;
      if (queFin == undefined) {
         var scope = this;
         var url:String = raiz + num + ext;
         contenedor.precarga.loadClip(url, contenedor.contenedor2);
         contenedor.precarga.onLoadStart = function(mc:MovieClip) {
            contenedor.precarga.unloadClip(mc);
            num++;
            scope.loadSec(raiz, ext, num);
            scope.listaFotos.push(url);
         };
         contenedor.precarga.onLoadError = function(mc:MovieClip, error:String) {
            if (error == "URLNotFound") {
               scope.contenedor.precarga.onLoadStart = null;
               scope.onLoadComplete();
            }
         };
      } else {
         for (var i:Number = queNum; i <= queFin; i++) {
            var url:String = raiz + i + ext;
            listaFotos.push(url);
         }
         this.onLoadComplete();
      }
   }

Código :

fondoLoop.onLoadComplete = fondoLoop.start;
fondoLoop.loadSec("foto", ".jpg", 1);

o

Código :

fondoLoop.loadSec("foto", ".jpg", 1, 5);
fondoLoop.loadSec("grafico", ".gif", 1, 8);
fondoLoop.push("mapa7.jpg");
fondoLoop.push("esquema_1.jpg");
fondoLoop.start();

Por cierto... al tocar algunos nombres de variable de tu función dejó de funcionarme el scope.i++; pero si el num++ (sin el scope.) dentro del onLoadStart... :? a ver si sabes decirme por que... :oops:

makeguen_blog :

Alguien se curraria un pause?

Las funciones stop() y start() ya te funcionarian como pause...
Pero bueno... si quieres un metodo pause() ahí va:

Código :

public function pause() {
      isPaused = !isPaused;
      isPaused == true ? this.stop() : this.start();
   }

*has de añadir una variable privada:

Código :

private var isPaused:Boolean;

Por: Zguillez
Muchas gracias Zguillez, este mismo día lo pruebo.
Por: Makeguen_blog

Zguillez :

Por cierto... al tocar algunos nombres de variable de tu función dejó de funcionarme el scope.i++; pero si el num++ (sin el scope.) dentro del onLoadStart... :? a ver si sabes decirme por que... :oops:

La respuesta a esa pregunta me llevó un buen tiempo, hasta que se me ocurió la idea de la variable scope.
La cosa es que, dentro de una función this.variable se refiere al ámbito donde se declara la función Por ejemplo dentro de la función loadSec, se refiere a la instancia de LoopIMG. Y variable solamente se refiere a dentro de la misma función si es allí dónde la declaras (no hay forma de acceder desde fuera) o también al ámbito de donde está definida la función si sólo te refieres a ella.
En cambio, dentro de un controlador de eventos, como puede ser (onEnterFrame o onLoadStart) this se refiere a dónde se invoca el controlador de eventos (en las respectivas instancias de MovieClip y MovieClipLoader, según mis ejemplos). Y no poner nada se refiere al ámbito de en el que se declara (en la función onLoadError, a la función loadSec).
Y aquí surge el problema ¿cómo se referencia desde onLoadStart a la función loadSec? Lo que a mí me ha servido ha sido una variable var scope=this dentro de la función, y referenciarla dentro del evento.
Y la razón por la que no te funciona es porque defines la variable num dentro de la función, y no en las propiedades de la clase.

Saludos.
Por: Zah
Despues de leer todo, me quede perdido...jeje... al fin y al cabo como quedo el código final...
Gracias
Por: Will_blog
seria mejor si dejaan un ejemplo de como se ve ccuando se usa el codigo q escriben
Por: karina _blog
Traté de compilarlo como carpeta, bajo AS 2.0, y me da este error:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: The class or interface 'LoopIMG' could not be loaded.
var fondoLoop:LoopIMG = new LoopIMG(this);

Total ActionScript Errors: 1 Reported Errors: 1
Por: Ladodos_blog

Will_blog :

Despues de leer todo, me quede perdido...jeje... al fin y al cabo como quedo el código final...
Gracias

Código :

class LoopIMG {
   private var ruta:MovieClip;
   private var listaFotos:Array;
   private var tiempo:Number;
   private var isPaused:Boolean;
   private var contenedor:MovieClip;
   private var paseDeFotos:Number;
   private var foto:Number;
   private var i:Number = 0;
   public var onLoadComplete:Function;
   //-------------------------
   public function LoopIMG(queRuta) {
      ruta = (ruta == undefined) ? _root : queRuta;
      contenedor = ruta.createEmptyMovieClip("contenedor1", ruta.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor1", contenedor.getNextHighestDepth());
      contenedor.createEmptyMovieClip("contenedor2", contenedor.getNextHighestDepth());
      listaFotos = new Array();
      setTiempo(2000);
      foto = 0;
      //
      contenedor.precarga = new MovieClipLoader();
      contenedor.precarga.onLoadComplete = function(cont:MovieClip) {
         cont.onEnterFrame = function() {
            if (this._alpha < 100) {
               this._alpha += 10;
            } else {
               delete this.onEnterFrame;
            }
         };
      };
   }
   public function setTiempo(queTiempo) {
      tiempo = queTiempo;
   }
   public function setPosicion(queX, queY) {
      contenedor._x = queX;
      contenedor._y = queY;
   }
   public function start() {
      contenedor.contenedor2._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], contenedor.contenedor2);
      paseDeFotos = setInterval(this, "SiguienteImagen", tiempo);
   }
   public function stop() {
      clearInterval(paseDeFotos);
   }
   public function pause() {
      isPaused = !isPaused;
      isPaused == true ? this.stop() : this.start();
   }
   public function push(queDato) {
      switch (typeof (queDato)) {
      case "string" :
         var extension:String = queDato.substr(queDato.length - 3, 3);
         switch (extension) {
         case "xml" :
            var ruta = this;
            var xmlFotos:XML = new XML();
            xmlFotos.ignoreWhite = true;
            xmlFotos.load(queDato);
            xmlFotos.onLoad = function(success:Boolean) {
               if (success) {
                  var xmlNodo:XML = this.firstChild;
                  var total:Number = xmlNodo.childNodes.length;
                  for (var i:Number = 0; i < total; i++) {
                     ruta.listaFotos.push(xmlNodo.childNodes[i].firstChild.nodeValue);
                  }
               }
            };
            break;
         default :
            listaFotos.push(queDato);
            break;
         }
         break;
      case "object" :
         listaFotos = queDato;
         break;
      }
   }
   public function pop(queURL) {
      listaFotos.pop(queURL);
   }
   public function shift(queURL) {
      listaFotos.shift(queURL);
   }
   public function unshift(queURL) {
      listaFotos.unshift(queURL);
   }
   public function trace() {
      trace(listaFotos);
   }
   public function remove(queDato) {
      switch (typeof (queDato)) {
      case "number" :
         var temp1:Array = listaFotos.slice(0, queDato - 1);
         var temp2:Array = listaFotos.slice(queDato, listaFotos.length);
         listaFotos = temp1.concat(temp2);
         break;
      case "string" :
         for (var num in listaFotos) {
            if (listaFotos[num] == queDato) {
               remove(Number(num) + 1);
            }
         }
         break;
      }
   }
   public function clear() {
      listaFotos = [];
   }
   public function loadSec(queRaiz:String, queExtension:String, queNum:Number, queFin:Number) {
      var num = queNum;
      var raiz = queRaiz;
      var ext = queExtension;
      if (queFin == undefined) {
         var scope = this;
         var url:String = raiz + num + ext;
         contenedor.precarga.loadClip(url, contenedor.contenedor2);
         contenedor.precarga.onLoadStart = function(mc:MovieClip) {
            contenedor.precarga.unloadClip(mc);
            num++;
            scope.loadSec(raiz, ext, num);
            scope.listaFotos.push(url);
         };
         contenedor.precarga.onLoadError = function(mc:MovieClip, error:String) {
            if (error == "URLNotFound") {
               scope.contenedor.precarga.onLoadStart = null;
               scope.onLoadComplete();
            }
         };
      } else {
         for (var i:Number = queNum; i <= queFin; i++) {
            var url:String = raiz + i + ext;
            listaFotos.push(url);
         }
         this.onLoadComplete();
      }
   }
   //--------------------
   private function SiguienteImagen() {
      (foto < (listaFotos.length - 1)) ? foto++ : foto = 0;
      var cont:MovieClip = contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth() - 2);
      cont.swapDepths(contenedor.getInstanceAtDepth(contenedor.getNextHighestDepth() - 1));
      cont._alpha = 0;
      contenedor.precarga.loadClip(listaFotos[foto], cont);
   }
}

karina _blog :

seria mejor si dejaan un ejemplo de como se ve ccuando se usa el codigo q escriben

Aqui

Ladodos_blog :

Traté de compilarlo como carpeta, bajo AS 2.0, y me da este error:

**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 1: The class or interface 'LoopIMG' could not be loaded.
var fondoLoop:LoopIMG = new LoopIMG(this);

Total ActionScript Errors: 1 Reported Errors: 1

Ese error es el que muestra cuando haces una llamada a una clase que no esta cargada.
Has de copias el código anterior dentro de un archivo que se llame "LoopIMG.as" (respetando las mayúsculas). y este archivo lo has de colocar al lado de tu archivo .fla o dentro de la carpeta de clases AS2 (mira en Edicion/Preferencias/Actionscript/Configuracion de actionscript 2.0)

PD. Gracias Zah por tu aclaración ;)
Por: Zguillez
También podríamos hacer una rutina en PHP que leyera las imágenes ".jpg" que tengamos y que las envíe a un array, así las fotos no hace falta que tengan nombre de secuencia, sino que estén en una carpeta determinada :cool: ...

El código en PHP sería:

[code]
<?php
$fp=opendir(".");
$contador=0;
$datos=array();
while (false!==($file=readdir($fp))){
if ((strpos($file,'.jpg'))
Por: ByteEyes_blog
A ver si desde el foro lo puedo hacer, que desde el blog no hay manera...

el codigo en PHP:

Código :

<?php
     $fp=opendir(".");
   $contador=0;
   $datos=array();
     while (false!==($file=readdir($fp))){
        if ((strpos($file,'.jpg'))&&(is_readable($file))){
           $datos[$contador] = utf8_encode($file);
         $contador = $contador +1;
         }
        }
    closedir($fp);
   $t=implode(",", $datos); /*convertis el php a texto separado por comas cada posicion*/
   echo "&vector=".$t;
  ?>


Ni que decir tiene que este PHP debe estar en el servidor en la carpeta de las fotos, por ejemplo en "http://vuestraWeb/fotos/"...

y lo recibimos en AS de la siguiente manera:

Código :

var webPath:String = "http://vuestraWeb/fotos/"; //el directorio en el servidor de las fotos
//
//Declaramos una variable para enviar y para recibir...
var recibidor:LoadVars = new LoadVars ();
//Y por supuesto el array que contendrá los nombres de las fotos...
var fotosArray:Array = new Array();
//
recibidor.vector = "";
recibidor.load (webPath + "dir.php");
recibidor.onLoad = function (success) {
   //Ahora vamos meter los datos del String que hemos recibido de PHP, usando las comas como separador// 
   fotosArray = recibidor.vector.split (",");
   for (i=0; i< fotosArray.length; i++){
      trace (fotosArray[i]);
   }
};


Ale, ya está, muchísimo más rápido, simple y fiable que crear un PHP que lo vuelque todo a un XML para leerlo en Flash como tal...
Por: byteeyes
mmm... interesante... Lo probaré
Buen aporte byteeyes, gracias (y)
Por: Zguillez
Sí, la verdad es que esto resuelve muchos problemas, como crear aplicaciones, subir fotos y luego la foto no aparece...

Lo más seguro es que postee la solución completa a este problemón que hemos tenido con el filereference()...

gracias :)
Por: byteeyes
excelente el scrip de zguillez.
funciona a la perfeccion.
Espero no les moleste si lo utilizo en mi página.
Mil gracias a todos.
Por: pink_blog
Mmmhh... Tal como está ahora la funcióm loadSec no funciona.

Código :

   if (NInicial != undefined) {
         i = NInicial;
      }


Estas líneas no son por capricho. Tendré que usar recursiones de esta función y para ellas se usa un contador interno, que está declarado FUERA de la función. Falta que en onLoadError la i se ponga a 0... y sí, i es un nombre pésimo para esa variable.
Por otro lado, yo haría el array de fotos accesible con un getter y un setter, cambiaría el nombre del método push por addItem o algo así, para no tener que estar jugando a copiar todos los métodos de Array.
Por: zah_blog
Hola!
Muy bueno el script. Realmente muy util!
Yo tengo un pequeño problema, a ver si sabeis el porque. Cuando executo la pelicula flash simulando la descarga, las fotos no se muestran bien. ¿A alguien le pasa?
Por: oblidat_blog
[quote=byteeyes]Ale, ya está, muchísimo más rápido, simple y fiable que crear un PHP que lo vuelque todo a un XML para leerlo en Flash como tal...[/quote]

Ajá y para los que no sabemos como aplicar esto último, hay alguna guía para Dummies?

Gracias
Por: Baccxus_blog
Bueno, cuando haces esto tienes un array llamado fotosArray que contiene los nombres de las fotos.

Para aplicarlo, si no me equivoco, sería algo así como:

le metemos uno a uno los nombres de las fotos:

Código :

var fondoLoop:LoopIMG = new LoopIMG(this);
var webPath:String = "http://vuestraWeb/fotos/";
var recibidor:LoadVars = new LoadVars ();
var fotosArray:Array = new Array();
//
recibidor.vector = "";
recibidor.load (webPath + "dir.php");
recibidor.onLoad = function (success) {
   fotosArray = recibidor.vector.split (",");
};
fondoLoop.setPosicion(100, 50);
for (var i=0; i<fotosArray.length; i++){
   fondoLoop.push(fotosArray[i]);
}
fondoLoop.start();


o bien:
le metemos directamente el array

Código :

var fondoLoop:LoopIMG = new LoopIMG(this);
var webPath:String = "http://vuestraWeb/fotos/";
var recibidor:LoadVars = new LoadVars ();
var fotosArray:Array = new Array();
//
recibidor.vector = "";
recibidor.load (webPath + "dir.php");
recibidor.onLoad = function (success) {
   fotosArray = recibidor.vector.split (",");
};
fondoLoop.setPosicion(100, 50);
fondoLoop.push(fotosArray);
fondoLoop.start();


Por supuesto, sin olvidar meter el PHP en la carpeta de fotos del servidor, que será, según este ejemplo:
http://vuestraWeb/fotos/

De todos modos, estoy preparando un nuevo post que subiré en unos días con un ejemplo práctico de cómo usar este "dir" de servidor.

Saludos,
Por: byteeyes

zah_blog :

Mmmhh... Tal como está ahora la funcióm loadSec no funciona.

Código :

   if (NInicial != undefined) {
         i = NInicial;
      }


Estas líneas no son por capricho. Tendré que usar recursiones de esta función y para ellas se usa un contador interno, que está declarado FUERA de la función. Falta que en onLoadError la i se ponga a 0... y sí, i es un nombre pésimo para esa variable.
Por otro lado, yo haría el array de fotos accesible con un getter y un setter, cambiaría el nombre del método push por addItem o algo así, para no tener que estar jugando a copiar todos los métodos de Array.

mmm... ¿por que dices que no funciona? yo lo he probado y si que me funciona... :o
para que nos entendamos la última version de esta funcion es:

Código :

public function loadSec(queRaiz:String, queExtension:String, queNum:Number, queFin:Number) {
      var num = queNum;
      var raiz = queRaiz;
      var ext = queExtension;
      if (queFin == undefined) {
         var scope = this;
         var url:String = raiz + num + ext;
         contenedor.precarga.loadClip(url, contenedor.contenedor2);
         contenedor.precarga.onLoadStart = function(mc:MovieClip) {
            contenedor.precarga.unloadClip(mc);
            num++;
            scope.loadSec(raiz, ext, num);
            scope.listaFotos.push(url);
         };
         contenedor.precarga.onLoadError = function(mc:MovieClip, error:String) {
            if (error == "URLNotFound") {
               scope.contenedor.precarga.onLoadStart = null;
               scope.onLoadComplete();
            }
         };
      } else {
         for (var i:Number = queNum; i <= queFin; i++) {
            var url:String = raiz + i + ext;
            listaFotos.push(url);
         }
         this.onLoadComplete();
      }
   }

si no le introduces el parametro queFin, realiza el bucle hasta que no encuentra el archivo... evidentemente me sale el error de "Error opening URL" en el panel salida, pero el loop de fotos comienza sin problemas...
Por: Zguillez
Cierto, error mío.
No me había fijado en que habías cambiado el nombre a onLoadComplete. Pensé que se refería al loader.
Por: Zah
UHM bien trabajado pero aburrido! :Þ
Por: Ditmar_blog
Buenissima clase, aunque le he encontrado un pequeño inconveniente.

La he querido usar en una web para mostrar varias fotos de fondo. He puesto el tiempo en 5000 pero como las fotos pesan entre 50-70 kb, al ver la web con conexiones lentas (modem) antes que se cargue una foto el codigo ya llama a la siguiente con lo que no llega a mostrarse y antes que cargue la segunda, el codigo llama a la tercera, y asi continuamente hasta que al cabo de un rato se muestran todas las fotos bien, ya que han conseguido cargarse en el cache del navegador.

No se podria hacer que la clase no llamara a la siguiente foto del array hasta que la anterior no este cargada completamente?

Gracias
Por: Spiderz_blog

Spiderz_blog :

Buenissima clase, aunque le he encontrado un pequeño inconveniente.

La he querido usar en una web para mostrar varias fotos de fondo. He puesto el tiempo en 5000 pero como las fotos pesan entre 50-70 kb, al ver la web con conexiones lentas (modem) antes que se cargue una foto el codigo ya llama a la siguiente con lo que no llega a mostrarse y antes que cargue la segunda, el codigo llama a la tercera, y asi continuamente hasta que al cabo de un rato se muestran todas las fotos bien, ya que han conseguido cargarse en el cache del navegador.

No se podria hacer que la clase no llamara a la siguiente foto del array hasta que la anterior no este cargada completamente?

Gracias

mmm... se podria hacer algo con el onLoadComplete del MovieClipLoader. Me lo miraré con calma...
Por: Zguillez
Esta clase está genial.
Estoy intentando hacer que un texto se superponga a la imagen visible y se muestre, pero con mis escasos conocimientos de AS no me está funcionando bien, me aparece la primera vez, pero con el cambio de fotografía desaparece.¿ como lo hariais vosotros? (Me gustaría cargar el texto desde un Array paralelo al de las fotos)
Por: diesalher_blog
Se te oculta el texto porque las imagenes se cargan en la última capa (getNextHighestDepth()) ... lo puedes solucionar creando un movieclip vacio y meter ahi el loop de fotos, el texto lo colocarias en otro clip situado por encima.
Por: Zguillez
Bien, ya casi lo tengo funcionando. Creo un TextField dinamicamente en el OnLoadComplete

Código :

      contenedor.precarga.onLoadComplete = function(cont:MovieClip) {

cont.createTextField("labelContenedor",cont.getNextHighestDepth(), 0, 0, 150, 20);
     cont.labelContenedor.text = "hola";
                           
          cont.onEnterFrame = function() {
            cont.labelContenedor._x ++;                        
            if (this._alpha < 100) {
               this._alpha += 5;
              
            } else {
              
            }
           };
};


mi problema es que no puedo cargar el texto de ese TextField dinamicamente, ya que parece que dentro del OnLoadComplete no tengo visibilidad para las variables declaradas en la clase.
Mi objetivo es poder cargar ese texto de manera tal que

Código :

cont.labelContenedor.text = listaTextos[foto];

pero la variable foto no es visible desde el OnLoadComplete, alguien se le ocurre algo?
Por: diesalher
Mirate esto
Por: Zguillez
jop, no existe un fla de ejemplo para este turtorial m he tado mirandoa si los tutoriales de accionscript y me cuesta mucho :( asi q siguendo paso a paso este no me aclaro mucho de donde tengo q poner cada cosa, si dentro del mv, en acciones en el frame....
esta increible el efecto!!!
Por: nenitaa_blog
Aqui tienes todos los archivos necesarios:
http://www.cristalab.zguillez.com/LoopIMG/
Por: Zguillez
Hola.
soy novato a más no poder..donde tengo que poner la ruta donde tengo las fots..y como lo escribo???
gracias
Por: Gmac_blog
Os esplico detalladmente mi problema a ver si me podeis ayudar.
Tengo una presentación, y quiero poner unas fotos que cuando cambien de una a otra no tengan un cambio brusco..por eso me interesa esta transición.
Quiero que cuando pulde un boton empiece este efecto, se reproduzaca la peli con este esfecto...no tengo ni idea de programar..estoy empezando..por tanto toy muy pez a la hora de entender estos códigos..si me lo podeis explicar en modo subnormal(usease para mi xDDDD)
Necesito saber como cargo las imágenes que tengo en la carpeta "IMG" en la misma carpeta del archivo que estoy haciendo.
Por: Gmac_blog
Hola, bueno , esta es la primera ves que voy a escribir en este foro, vamos a ver como me resulta. Lo que quiero hacer es una minigaleria de fotos..osea...un swf donde se cargen externamente unas dos o tres imagenes . Yo ya he conseguido la galeria q necesito y es exactamente esta..http://www.cristalab.com/tips/28646/clase-para-transiciones-de-fotos-en-flash ,

Lo malo de esta, es q alguien con un modem de 56k le pasan las fotos pero cuando se termina el tiempo de transicion ya pasa a la otra aunque no este cargada entonces no se ve...enotences lo que ando necesitando seria que no vien empiece el swf aparesca con peloader q carge la priemra foto..cuando esta esta cargada q aparesca la primera foto. Luego que aparecio la primera foto, que esta se detenga, que carge la segunda foto (puede ser de q abajo aparesca algo diciendo loading x%) y cuando la segunda foto se cargo que se deje de dentener la priemra foto y se debanesca y aparesca la segunda foto....... Y LUEGO TODO lo mismo, q se detenga la segunda foto, aparesca abajo loading , cuando cargo la 3era foto se debanseca y empiece la tercera...y asi consecutivamente...

Ya se que es algo bastante dificil, pero lo necesito y no e encontrado nada igual ni similar. muchas gracias.
Por: Gaston Morixe - gastonmor

Gaston Morixe - gastonmor :

Hola, bueno , esta es la primera ves que voy a escribir en este foro
Las preguntas no las pongas aca (En el campo de la derecha de los comentarios de un artículo lo especifica). Para esas cosas mejor ve al que de verdad si es un foro
Por: Freddie
Saludos me interesa mucho este articulo, pero tengo una pregunta yo tengo la accion script en un layer y arriba de la accion kiero poner algo como unos botones, ke tengo ke hacer para ke se vean los botones.. Gracias..
Por: Josepg_blog
La función en XML no funciona.

Además, se habla de un método pushXML(), el cual no existe. Se usa igualmente el método push().

Resulta que dentro de la función de onLoad del XML, no deja apuntar a las variables de fuera, de modo que listaFotos es undefined.

No se si es por la versión del Flash (uso la 7 con AS 2.0) o porque falta algún comando, no lo se.

Saludos. Estupendo artículo.
Por: Dmorente
He averiguado el por qué.

Dentro de la misma función onLoad del XML, hace referencia a la variable var ruta = this; (repetida porque es una variable privada de tipo MovieClip).

He cambiado el nombre de esa variable y ya puedo apuntar afuera con rutaFuera.listaFotos (por ejemplo).

Mola!
Saludos.
Por: Dmorente
En vista que tras dos dias de haber posteado una pregunta en el foro nadie me contesta y dada la urgencia de reolver el problema que tengo , me veo en la obligación de colocar en esta sección mi pregunta, sabiendo que no es el lugar apropiado. ¡Perdón por las molestias!...
Estoy utilizando la clase LoopIMG.as en un rotador de banners (swf_indexbanner.swf) y todo funciona correctamente cuando se ejecuta por separado.
El problema surge cuando llamo desde un swf principal (swf_index.swf) al swf_indexbanner.swf. También funciona pero no llega a eliminar el banner anterior cargado, aunque dentro de la clase he aumentado el tiempo a 8000.
¿Qué puede suceder?
Gracias por la ayuda prestada
Por: javier garcía rodríguez_b
Me perdi... alguién llego a hacerla entera para pasarmela?

lafuriadelrey@hotmail.com
Por: Daniel_blog
por favor enseñenme desde cero esque soy novato en esto
Por: richi_blog
como colocar una foto en mi pagina
Por: carlugo
saben porque flash 8 no toma un monton de actionscripts hechas en flash 6??? ni siquiera publicadas en actionscript 1??? no se les ocurrio a macromedia hacer algo para actualizar las acciones dentro de un archivo automáticamente a actscrpt 2?? hay forma?
Por: mikel_blog
bueno ya intente todo de todo.. a ver si alguien puede ayudarme... tengo armado esto
http://selladoras-cec.com/img/banner_es.swf

esto tiene q verse en http://selladoras-cec.com/ y no logro hacerlo

el codigo es
var fondoLoop:LoopIMG = new LoopIMG(this);
fondoLoop.pushXML("http://selladoras-cec.com/img/fotos.xml");
fondoLoop.start();
Stage.scaleMode = "noScale";

http://selladoras-cec.com/img/LoopIMG.as

lo q sucede es q esta al parece el home.php dentro de un frame.. el home seria http://selladoras-cec.com/pub/homepage.php
Por: adrian_blog
Hola he aplicado lo aprendido aqui <a [url]http://www.furgomania.com/trabajos/menu.html[url]
y todo ha ido de maravilla...

me gustaria saber como lograr que al pinchar sobre la pelicula pueda ir a una url...

no tengo nidea como hacerlo gracias por todo
Por: David_blog
Disculpar el enlace de antes esta aqui
http://www.furgomania.com/trabajos/menu.html
Por: David_blog
me gustaría hacer que la galería se detenga al llegar a la última foto y que no haga bucle, pero no sé dónde poner la función de stop. alguién me ayuda?

gracias.
Por: alberto_blog
Hola,
Estoy utilizando este codigo y todo muy bien peró me gustaría que al passar por encima de la imagen se hiciera más grande. Como lo hago? Ya tengo un boton que al passar se para la seqüencia...

Gracias!!
Por: Mina_blog
Hola !

Felicitaciones, tu clase en realidad me ayuda bastante cuando la combino con XMLs ! pero hay algo que no he podido realizar y me he roto la cabeza tratando de hacerlo. Necesito un método que destruya los movieclips de la transición !

Lo que trato de hacer es meter una instancia de tu clase dentro de un movieclip, y al presionar un botón en el _root, ese movieclip debería cargarme otra animación que tengo hecha por separado, sin embargo la transición de fotos queda superpuesta por sobre todas las animaciones y no encuentro la forma de destruirla.

Ojalá me puedas ayudar !

Gracias !
Por: dmarvp_blog
Gente, hince funcionar perfecto un SlideShow de Imagenes, el tema es que cuando tiro el objeto swf a una pagina .ASPX, no se reproduce nada.

paso el pedazo de codigo donde pongo el swf:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="699" height="189">
<param type="application/x-shockwave-flash" />
<param name="movie" value="Img_sistema/Flash/slideshow.swf">
<param name="quality" value="high">
<embed src="Img_sistema/Flash/slideshow.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" width="699" height="189"></embed>
</object>

Espero puedan darme una manito.
desde ya, Gracias a todos.
Por: Guille_blog
Hola,
He probado la classe y me funciona bién excepto cuando utilizo un xml.
El problema es que antes de cargarse el xml, se llama a la función fondoLoop.start() y eso hace que la primera imagen del xml, no se visualice hasta que recorre todo el loop y vuelve a comenzar.

Lo he podido solucionar añadiendo:
ruta.start(); después del bucle for, que está en la función push(queDato)

y quitando la linea fondoLoop.start(); que está en el codigo dentro del flash.
Ahora me funciona bien para el XML, pero no para el metodo estático/manual:
fondoLoop.push("foto1.jpg"); ya que al quitar fondoLoop.start(); no se iniciaría el loop.

Creo que estaría bien, añadir en alguna funcion un detector que compruebe si es un xml o no y en el caso que de no lo sea llame a la función start en el debido momento.

Espero que os ayude, y haber si alguien puede aportar alguna solución más completa...
Por: marchomen
no me funciona no entiendo bien como hay q hacer. nose donde donde qda la carpeta clases para añadir el archivo "LoopIMG.as " y no funciona nada. Soy demasiado novato en estos y hace varios dias q le vengo peleando para ver como mier...tengo q acr y no le encuentro la vuelta les agradeceria si me pueden ayudar para un acr un paso a pasa o sino mi correo es "wolf125x@hotmail.com" desde ya gracias
Por: Wolf_blog
me parece genial este ejemplo pero en todos los ejemplos que he visto ninguno incluye colocar las urls a las fotos .. para que realmente funcione como banner .. alguien podria pasarme los archivos con estos datos a jairton1s@latinmail.com

gracias
Por: Jairton_blog
Hola a todos esta genial esta clase... tengo una duda estuve utilizandola en un proyecto que tengo y estube tratando de hacer que las fotos quedaran dentro de una mascara pero al parecer no lo he logrado, pudiera alguien ayudarme con esta cuestión, de antemano muchas gracias... seguire intentando
Por: Ezequiel-blog
Podrían decirme cómo hacer para que, una vez que termine la secuencia de fotos (yo tengo 15) se me abra una URL? no sé cómo hacerlo, no sé si debe ir en la clase o en el fla principal, lo he intentado pero no me sale, porque o no me abre la secuencia y pasa directamente a la URL o me sale la secuencia y no me abre la URL.
Por: al_di-blog
He leído y releído y no encuentro respuesta a una cuestión importante que alguien ha formulado más arriba. Se trata de no permitir continuar la transición mientras no se carga la siguiente.

Tal como está planteado no tiene mucho sentido en web si la reproducción se atasca por que no se da cargado la siguiente imagen.

Yo además busco que mientras se muestra una imagen, ya la siguiente se precargue para estar lista.
Por: Mark-blog
nooooo enntiendoooooooooooooo
Por: .........-blog
Joer, que grandes sois :)
Por: spanisher
Saludos, ¿como puedo hacer para que al finalizar el loop haga un gotoandplay a otro frame?
Por: OP-blog
jkxcsdfjkosdfjaksdfjk
Por: sdksjadfnka-blog
algun dia y gracias a la virgen maria, flash desaprecera definitivamente y llegaran programas en condiciones. este es prrehistorico, es algo asi como volver al msdos pero con colorines ;)
Por: ma-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.