Comunidad de diseño web y desarrollo en internet online

setInterval variable

Citar            
MensajeEscrito el 26 May 2010 06:40 pm
Buenas tardes,

En primer lugar queria felicitaros a todos los que formais parte activa del foro por vuestra ayuda.

Estoy intentando desarrollar un proyecto que consiste en un flash que va cargando swfs. Quiero que los vaya cargando secuencialmente en modo loop (cuando termina con el ultimo comienza el primero de nuevo) y querría poder configurar la duración de forma independiente para cada swf (por ejemplo que el primero estuviese 10sg, el segundo swf 15 sg y que el tercero p.ej estuviese reproduciendose 60 sg y que las duraciones pudiesen ser variadas en cualquier momento modificando el XML.

De momento solo he conseguido que se reproduzcan de forma secuencial pero todos con la misma duración. ¿Como puedo hacer para que cada swf se reproduzca con un tiempo distinto?

Fichero lista.xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CATALOGO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<VIDEO>
<FICHERO>file1.swf</FICHERO>
<DURACION>10000</DURACION>
<ORDEN>1</ORDEN>
</VIDEO>
<VIDEO>
<FICHERO>file2.swf</FICHERO>
<DURACION>15000</DURACION>
<ORDEN>2</ORDEN>
</VIDEOD>
<VIDEO>
<FICHERO>file3.swf</FICHERO>
<DURACION>60000</DURACION>
<ORDEN>3</ORDEN>
</VIDEO>
</CATALOGO>




//Permite pantalla completa y la comprueba cada 5 segundos
full = function(){
fscommand ("fullscreen",true);
}
var cargafull = setInterval(full, 5000);
//Declara la variable "myXML" como un objeto XML
var myXML:XML = new XML();
myXML.ignoreWhite = true;
//cargamos lista.xml
myXML.load("lista.xml");
//Función que se ejecuta en el momento en el que Flash cargue el XML
myXML.onLoad = function(exito) {
//La variable exito sera "true" si se cargo bien y "false" si hubo
//algun error
if (exito) {
// calcula la longitud de registros del xml
total=myXML.firstChild.childNodes.length;
//definen las variables como Array
video=[];
for (i=0; i<total; i++){
video[i] = myXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
segundos[i] = myXML.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue;
}
loadMovie(video[2], container_mc);
trace(i);
//esta linea la he tenido que incluir porque no me funciona el tiempo variable
segundos = myXML.firstChild.childNodes[2].childNodes[1].firstChild.nodeValue;
i=0;
carga = function(){
trace(i);
loadMovie(video[i], container_mc);
i++;
if(i>total-1){
i=0;
}
}
var cargaint = setInterval(carga, segundos);
} else {
//Muestra un mensaje de error en caso de que algo fallara
trace("error");
}
}

Por jbrooks

2 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 May 2010 03:19 am
En vez de usar setInterval, prueba mejor con setTimeout y colocas la duración en cada caso.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 27 May 2010 05:37 pm
Gracias por tu consejo, pero sigo teniendo problemas solo me reproduce uno de los swf. No consigue hacer la rutina.

Este es el codigo as2, usando el setTimeout

Código ActionScript :

//Permite pantalla completa
full = function(){
fscommand ("fullscreen",true);
}
var cargafull = setInterval(full, 5000);
//Declara la variable "myXML" como un objeto XML
var myXML:XML = new XML();
/*Esta linea es EXTREMADAMENTE necesaria
  Es la que nos permite colocar espacios entre etiquetas
  Sin ella, tendriamos que mantener completamentepegado nuestro XML
  Y se parsearia mal dentro de Flash
*/
myXML.ignoreWhite = true;
//cargamos lista.xml
myXML.load("lista.xml");
//Función que se ejecuta en el momento en el que Flash cargue el XML
myXML.onLoad = function(exito) {
   //La variable exito sera "true" si se cargo bien y "false" si hubo
   //algun error
   if (exito) {
      // calcula la longitud de registros del xml
      total=myXML.firstChild.childNodes.length;
      //definen las variables como Array
      video=[];
      segundos=[];
      //trace(total);
      //loadMovie(myXML.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue, container_mc);
      for (i=0; i<total; i++){
      video[i] = myXML.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;
      segundos[i] = myXML.firstChild.childNodes[i].childNodes[1].firstChild.nodeValue;
      trace("video " + video[i]);
      trace(segundos[i]+" segundos");
      }
      i=0;
      if(i>total-1){
         i=0;
         }
         else{
      trace(i);
       showMe = function(){
         trace("showme "+i+" durante "+(segundos[i]/1000)+" segundos");
         loadMovie(video[i], container_mc);
         }
      setTimeout(showMe, segundos[i]);
      i++;
         }

   } else {
      //Muestra un mensaje de error en caso de que algo fallara
      trace("error");
   }
}


Se te ocurre algo?

Por jbrooks

2 de clabLevel



 

msie
Citar            
MensajeEscrito el 28 May 2010 01:03 am
Debes sacar tanto la función ShowMe como el setTimeout del bucle. No tienen sentido dentro de él, luego crea una variable que funcione como contador.

Por otro lado, usa MovieClipLoader para controlar la carga del swf y llama al setTimeOut en la función onLoadInit de MovieClipLoader, así no comenzará a contar hasta que se haya cargado y comenzado a reproducirse.

Al menos es lo que yo haría

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome
Citar            
MensajeEscrito el 28 May 2010 03:14 pm
La verdad es que estoy superperdido con todo esto. Sería mucho pedir que escribieses el código?

Te lo agradecería mucho.

Por jbrooks

2 de clabLevel



 

msie
Citar            
MensajeEscrito el 28 May 2010 05:34 pm
Lo siento, no puedo hacer eso. Pero no es complicado, respira profundo, tómatelo con calma y sigue los pasos. Es cosa de ponerle un poquitín de lógica y podrás resolverlo. En cualquier caso ya tienes prácticamente todo el código escrito.

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

chrome

 

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