2010-06-09 5 views
11

Does actionscript 2.0/3.0 ha un equivalente di C# sleep()?Action Script Funzione sleep

+0

Per quale scopo? –

+3

Chi ha contrassegnato questa domanda come duplicata poiché la ** reale ** e la risposta corretta sono qui solo in questo thread qui sotto? È una buona domanda e una buona [risposta] (http://stackoverflow.com/a/3011589/1442225). – Bitterblue

risposta

19

Non proprio. È possibile bloccare (quasi tutto) l'esecuzione di codice con qualcosa del tipo:

function sleep(ms:int):void { 
    var init:int = getTimer(); 
    while(true) { 
     if(getTimer() - init >= ms) { 
      break; 
     } 
    } 
} 

trace("hello"); 
trace(getTimer()); 
sleep(5000); 
trace("bye"); 
trace(getTimer()); 

Ma non vedo come potrebbe essere utile in flash. E, allo stesso tempo, qualsiasi cosa come il codice di cui sopra è una pessima idea in quanto il giocatore si bloccherà e non risponderà (e potrebbe anche fornire un timeout di script se superi il limite di timeout, che è 15 per impostazione predefinita).

Se si desidera semplicemente ritardare l'esecuzione di una parte di codice, è possibile utilizzare un oggetto Timer o la funzione setTimeout. Questo sarà non-blocking, però, quindi dovrai usare una sorta di flag come suggerito da TandemAdam. Sarà fragile, nel migliore dei casi.

Forse c'è un approccio migliore per il tuo problema, ma non è chiaro cosa stai cercando di realizzare nella tua domanda.

+0

Grazie, potrei usare questo .. volevo ritardare l'esecuzione di qualche blocco di codice di meno di 100 ms. – Kemrop

+1

Questo è un buon codice per scopi di test! +1 – Worker

+0

Questo è un uso della CPU completamente inutile e quasi certamente dovrebbe essere downvoted. – sleepycal

1

Nessun ActionScript/Flash Player non ha un equivalente alla funzione sleep C#. Per una cosa Flash non usa più thread.

È necessario implementare manualmente la funzionalità.

È possibile utilizzare un flag booleano, che il codice verrà eseguito solo quando è true. Quindi utilizzare Timer class per il ritardo.

3

è possibile implementare una funzione sleep come questo:

function sleep(counter: int, subsequentFunction: Function, args: Array): void 
{ 
    if (counter > 0) 
     callLater(sleep, [counter - 1, subsequentFunction, args]); 
    else 
     callLater(subsequentFunction, args); 
} 

chiamata con la funzione che deve essere elaborato dopo la pausa.

// call trace('Hello') after 100 cycles 
sleep(100, trace, ['Hello']); 
// call myFunction() after 50 cycles 
sleep(50, myFunction, []); 

Il vantaggio di questo approccio è che l'interfaccia utente è ancora reattiva durante il sonno.

+0

Ciao! Come sarebbe la funzione callLater? – IneedHelp

+0

@IneedHelp: vedere la mia risposta aggiornata – splash