Comunidad de diseño web y desarrollo en internet online

Retardo en for

Citar            
MensajeEscrito el 01 Jun 2009 01:54 pm
Hola, soy algo novato con Actionscript pero a ver si me podeis ayudar.
Tengo un for que me realiza una serie de acciones un numero determinado de veces pero quiero que entre iteración e iteracion se espere 2 segundos. Es decir quiero que haga una vez las acciones se espere 2 segundos, las haga otra vez, así.
He probado con setInterval pero no tengo claro como debo utilizarlo.
Gracias por las respuestas

Por javico

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 02:50 pm
Hola,
prueba con esto:

Código :

var counter:Number = 10;
var intervalID:Number;

intervalID = setInterval(Update, 2000);

function Update():Void {
   trace("aquí las acciones a realizar");
   counter--;
   if (counter == 0) clearInterval(intervalID);
}

sustituye var counter:Number = 10; por el número de veces que quieras que se repita

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 01 Jun 2009 02:52 pm
pues, los intervalos si te funcionan, pero creo que lo usarias en vez del for

la cosa es asi:

Código ActionScript :

cont=0;
function ciclo () {
cont++;
trace("hola estoy ciclado");
if (cont == 5) {
clearInterval(dejavu);
delete dejavu;
delete cont;
play();
}
}
var dejavu = setInterval(cont, 2000);


en teoria deberia decir "estoy ciclado" cada dos segundos cuando cont es 0 hasta que es 5

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 01 Jun 2009 08:20 pm
Gracias por las respuestas, el problema es que eso ya lo intenté pero las acciones que debe hacer dependen del numero de iteracion en el que esté y parece que no funciona bien si lo pongo fuera. Este es el for:

Código :

for(i=1;i<=inf_jug2;i++){
      Enemigo=this["jug2_sold"+String(i)].encontrarEnemigo();
      if((Enemigo[0]-this["jug2_sold"+String(i)]._x)*(Enemigo[0]-this["jug2_sold"+String(i)]._x)+(Enemigo[1]-this["jug2_sold"+String(i)]._y)*(Enemigo[1]-this["jug2_sold"+String(i)]._y)<this["jug2_sold"+String(i)].ataque)this["jug2_sold"+String(i)].ataca(Enemigo[2]);
      this["jug2_sold"+String(i)].mover(Enemigo[0],Enemigo[1]);
      if((Enemigo[0]-this["jug2_sold"+String(i)]._x)*(Enemigo[0]-this["jug2_sold"+String(i)]._x)+(Enemigo[1]-this["jug2_sold"+String(i)]._y)*(Enemigo[1]-this["jug2_sold"+String(i)]._y)<this["jug2_sold"+String(i)].ataque)this["jug2_sold"+String(i)].ataca(Enemigo[2]);
      }


El problema es que debe esperar entre cada iteracion porque sino empieza una cuando aun no han acabado las acciones de otra y al final solo realiza la ultima.

Por javico

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2009 09:01 pm
Parece que el problema está con el transformar las string en referencias this["jug2_sold"+String(i)] porque si lo hago fuera de la función que debe repetir con el setInterval y lo veo con un trace sale bien. Pero si lo meto dentro de la función me sale como undefined. ¿alguien sabe por qué? Pongo un ejemplo:
Esto hace que me salga undefined 3 veces:

Código :

var itin:Number = 3;
idInt=setInterval(moversold,2000);

function moversold (){
   if(itin==3)itin=1;else itin++;
   Enemigo=this["jug2_sold"+String(itin)].encontrarEnemigo();
      trace(Enemigo);
   if(itin>=3){clearTimeout(idInt);}
   }


Y esto hace que me salga lo que realmente sale con la función encontrarEnemigo un array de dos numeros y un string, pero solo una vez logicamente. Debería de salir uno para cada objeto (jug2_sold1, jug2_sold2, jug2_sold3):

Código :

var itin:Number = 3;
idInt=setInterval(moversold,2000);
Enemigo=this["jug2_sold"+String(itin)].encontrarEnemigo();
   trace(Enemigo);

function moversold (){
   if(itin==3)itin=1;else itin++;
   if(itin>=3){clearTimeout(idInt);}
   }

Por javico

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2009 10:08 am
Creo que lo he resuelto, no había definido el ambito de la función setInterval y por eso no iba bien. Ahora poniendo esto:

Código :

setInterval(this,"moversold",2000);
parece que va. Me han aparecido otros problemas pero creo que no tiene nada que ver

Por javico

5 de clabLevel



 

firefox

 

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