2009-10-01 21 views
6

¿Hay alguna manera de detener la ejecución en ActionScript, como el método sleep()?Cómo detener la ejecución en ActionScript

Sé que hay un método setTimeout(), pero setTimeout() simplemente configura un evento para la ejecución diferida.

+0

¡Tengo que decir neato en los iconos de las etiquetas! ;-) – scunliffe

+0

¿Por qué quieres dormir() en un idioma que tiene solo un hilo de ejecución controlable? – scriptocalypse

Respuesta

0

No hay manera de pausar toda la ejecución de una aplicación como en PHP, pero hay soluciones (a menos que establezca un punto de interrupción o cree un error de tiempo de ejecución a propósito, no crea que eso es lo que quería decir). Probablemente esto se deba a que, por lo general, las aplicaciones flash están destinadas a ejecutar todos los scripts en menos de un "marco".

Es común poder "pausar" las animaciones de un sitio web cuando el usuario lo desenfoca. Esto se puede hacer al escuchar Event.DEACTIVATE y luego eliminar los oyentes ENTER_FRAME y eliminar todos los procesos en curso.

También podría crear un EventDispatcher central para reemplazar el interno ENTER_FRAME, de esta manera usted controla perfectamente la velocidad de ejecución así como pausar/reanudar (no dejará de ejecutar scripts, ni controladores asíncronos como cargadores, etc.).

+0

Hay un truco :) Vea mi respuesta. – geraldalewis

-4

Sí, sin embargo, hay que tener en cuenta el tiempo de espera de script de 15 segundos. (Se puede cambiar el tiempo de espera que 15 segundos guión en la Configuración de publicación ...)

que he encontrado en el pasado que si usted está buscando para esta funcionalidad, que está haciendo algo mal :)

Lo que sea que intentes lograr es, probablemente, llamar a un oyente de eventos en su lugar.

//adding this ENTER_FRAME event listener just to show that the script pauses for one 
// second before the first frame executes 
addEventListener(Event.ENTER_FRAME, onFrame); 

function onFrame(event:Event):void { 

    trace("first frame occurs after pause of", getTimer() + " ms"); 
    removeEventListener(Event.ENTER_FRAME, onFrame); 

}; 

var startTime:int = getTimer(); 
var pauseTime:int = 1000; 

while((getTimer() - startTime) < pauseTime) { 
    //do nothing... we're effectively pausing here... 
} 
+0

Ouch ... Eso duele ... – Luke

+0

Ha, sí, de hecho, pero bastante intenso ... –

+2

Esto no es un sueño. Tocará el 100% de la CPU en el ciclo while. En realidad, esto es mucho peor que tener una llamada setTimeout establecida en 1000. La única diferencia es que aquí, debido al uso de la CPU, está bloqueando efectivamente el programa para que no ejecute ningún otro "subproceso". – Glenn

1

Es necesario pensar en términos de no dormir. Actionscript no es ese tipo de lenguaje. Debido a que el reproductor flash alterna entre representaciones de cuadros y la ejecución del código, dormir en el código es siempre una mala idea, por lo que no hay un método para hacerlo.

Dicho esto, usted podría lograr esto utilizando el método de bloqueo ExternalInterface.call, y en Javascript ejecutando un método de bloqueo (como solicitud XHR).

Absolutamente idiota, así que no lo hagas.

Quizás lo que necesita es un Timer.

Cuestiones relacionadas