2009-10-01 14 views
6

Esiste un modo per interrompere l'esecuzione in ActionScript, ad esempio un metodo sleep()?Come interrompere l'esecuzione in ActionScript

So che esiste un metodo setTimeout(), ma setTimeout() imposta semplicemente un evento per l'esecuzione posticipata.

+0

Devo solo dire neato sulle icone dei tag! ;-) – scunliffe

+0

Perché vuoi dormire() in una lingua con un solo thread di esecuzione controllabile? – scriptocalypse

risposta

0

Non c'è modo di mettere in pausa tutta l'esecuzione di un'applicazione come in PHP, ma ci sono soluzioni alternative (a meno che non si imposti un punto di interruzione o si crei un errore di runtime di proposito, non pensare che sia ciò che intendevi). Probabilmente questo è perché solitamente le applicazioni flash sono pensate per eseguire tutti gli script in meno di un "frame".

È normale essere in grado di "mettere in pausa" le animazioni di un sito Web quando l'utente non lo mette a fuoco. Questo può essere fatto ascoltando Event.DEACTIVATE e quindi rimuovere gli ascoltatori ENTER_FRAME e uccidere tutti i processi in corso.

È anche possibile creare un EventDispatcher centrale per sostituire il ENTER_FRAME interno, in questo modo è possibile controllare senza problemi la velocità di esecuzione nonché la sospensione/ripresa (non arresterà l'esecuzione di script, né i gestori asincroni come i caricatori ecc.).

+0

C'è un trucco :) Vedi la mia risposta. – geraldalewis

-4

Sì, tuttavia, è necessario tenere presente il timeout dello script di 15 secondi. (È possibile cambiare la situazione Timeout 15 secondo script nelle impostazioni di pubblicazione ...)

ho trovato in passato che, se siete alla ricerca di questa funzionalità, si sta facendo qualcosa di sbagliato :)

Qualunque cosa tu stia cercando di ottenere è probabilmente la richiesta di un listener di eventi.

//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 ... Che fa male ... – Luke

+0

Ha sì sì, ma piuttosto intenso ... –

+2

Questo non è un sonno. Colperai la CPU al 100% nel ciclo while. Questo è in realtà molto peggio che avere una chiamata setTimeout impostata su 1000. L'unica differenza è che qui, a causa dell'utilizzo della CPU, si sta effettivamente bloccando il programma dall'eseguire altri "thread". – Glenn

1

è necessario pensare in termini di non dormire. Actionscript non è quel tipo di linguaggio. Poiché il flash player si alterna tra rendering di frame ed esecuzione di codice, dormire nel codice è sempre una cattiva idea, motivo per cui non esiste un metodo per farlo.

Detto questo, è possibile effettuare il utilizzando il metodo di blocco ExternalInterface.call e in Javascript l'esecuzione di un metodo di blocco (come la richiesta XHR).

Assolutamente idiota, quindi non farlo.

Forse quello che ti serve è un Timer.