Comunidad de diseño web y desarrollo en internet online

Pausar en AIR/flash

Citar            
MensajeEscrito el 06 Nov 2010 11:05 pm
Hola todos!

Estoy haciendo una aplicacione en AIR, la cual al iniciar llama al metodo browseDir ( ) de la clase File.

una vez que se ha seleccionado una carpeta, la aplicacion busca en todos los archivos de la misma usando un loop, si contiene una carpeta, se realiza la busqueda dento de la misma, y asi con todas las que encuentre.

la cuestion es que quiero que al encontrar un archivo, revise su extension y haga lo siguiente

1-si la extension no esta listada, preguntar que hacer
1.1-continuar busqueda
2-hacer lo debido con el archivo de dicha extension

la cuestion es que si la extension no estaba listada, se abre una ventana preguntando que hacer.

COMO DETENGO EL LOOP DE BUSQUEDA ESPERANDO LA RESPUESTA DEL USUARIO???

muchas gracias!

Por voices

43 de clabLevel



 

chrome
Citar            
MensajeEscrito el 07 Nov 2010 08:40 am
BuenAS:

Imagino que estás utilizando break para salir del for y utilizas varios for anidados. El problema es que en AS con break solo sales del bucle en el que lo has colocado, y no del superior que lo contiene.

Hay varias formas de interrumpir varios for anidados, a mí la que más me gusta es llamar a una función que devuelva true o false en función de si se ha interrumpido el bucle o no. Y como ahora lo que utilizas es un return, detienes todos los bucles anidados

Código ActionScript :

/*
for (var i:int = 0; i < 10; ++i) {
   trace("i:", i);
   trace("---");
   for (var j:int = 0; j < 10; ++j) {
      trace("j:", j);
      if (j == 4) break;
   };
   trace("---");
};
*/

trace(loop());

function loop():Boolean
{
   for (var i:int = 0; i < 10; ++i) {
      trace("i:", i);
      trace("---");
      for (var j:int = 0; j < 10; ++j) {
         trace("j:", j);
         if (j == 4) return true;
      };
      trace("---");
   };
   return false;
}


En el anterior código he dejado comentado un bucle anidado, que se interrumpe con break. Verás que este break NO sale de primer for.

Por otro lado, esta función devuelve true/false en función de que se haya interrumpido el for, pero puedes devolver el valor concreto que tenía el bucle cuando se ha interrumpido. Por ejemplo, en tu caso podrías devolver la extensión que ha provocado la detención.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 07 Nov 2010 11:48 pm
Hola Lukánicos.

Gracias por tu respuesta, me exprese mal al preguntar.

Ya se como detener un loop, pero lo que quiero es algo asi como pausar el loop, ya que de lo contrario, al encontrar un nuevo archivo y recibir la respuesta del usuario, deberia comenzar la busqueda desde el principio, y si la lista es muy larga seria un desgaste de memoria innecesario.

Como solucion a esto estaba armando una estructura de tipo arbol, para tener la organizacion de las carpetas y saber desde cual me quede y continuar la busqueda.

Por voices

43 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Nov 2010 06:00 am
BuenAS:

Por eso hablaba de una función un poco más "sofisticada". En lugar de true/false, te podría devolver los valores i, j, k... de los bucles, y cuando el usuario haga su elección (o lo que quieras que haga), reanudas los bucles en esas posiciones.

Código ActionScript :

function loop(array:Array, i0:int=0, j0:int=0):Array
{
   //aquí iría lo mismo de antes pero los bucles empezando por i0, j0...

   return [i, j]
}


La primera vez solo pasas el array que te da File, y las siguientes le vas pasando además el pto de ruptura en el anterior bucle.

Es una idea, adaptable al caso concreto.

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 08 Nov 2010 03:21 pm
ya logre hacer que funcione, pero ahora me surge otra duda:

suponiendo que el usuario tiene 1 millon de archivos de la misma extension y comienza la busqueda, la primera vez le saldra un cartel preguntando, pero luego la aplicacion hara un loop 999.999 veces, lo cual seguramente le indique al usuario que la aplicacion ha dejado de funcionar.

es posible unar getTimer ( ) para ir sabiendo cuanto ha pasado desde que comenzo el loop, y si pasaron (suponiendo) 5 segundos, cortar el loop para seguirlo en el siguiente fotograma?

GraciAS!

Por voices

43 de clabLevel



 

chrome

 

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