2010-04-21 16 views
10

I documenti per flash.utils.setTimeout() Stato:Timer vs setTimeout

Invece di utilizzare questo metodo, considerare creando un oggetto Timer, con l'intervallo specificato, utilizzando 1 come parametro repeatCount (che imposta il timer da eseguire una sola volta).

Qualcuno sa se c'è un vantaggio (significativo) nel farlo? L'uso di setTimeout è molto più semplice quando devi solo ritardare 1 chiamata.

risposta

11

setTimeout utilizza effettivamente una sottoclasse Timer, la SetIntervalTimer, che è una classe interna. È possibile verificare facendo setTimeout(function():void { throw "booom"; }, 1);. Lo vedrai nella traccia dello stack.

Come tale, non vedo davvero un grosso svantaggio. L'unica differenza è che hai 2 chiamate anonime invece di una. OTOH, in situazioni critiche per le prestazioni, non dovresti usare nessuno dei due (eccetto un timer interno) per evitare la frequente istanziazione degli oggetti TimerEvent.

Fondamentalmente, penso che sia una questione di gusti. Adobe ha deciso, il sistema di eventi AS3 è il brivido, quindi lo promuovono.

0

È a mia conoscenza che setTimeout è ammortizzato in AS3. Sto avendo un po 'di problemi a trovare la fonte del codice setTimeout, ma credo anche che sia più facile chiarire qualsiasi riferimento all'oggetto Timer, piuttosto che con setTimeout (se ricordo correttamente da AS2).

-2

setTimeout non funziona nei file .as esterni.

+0

hi. piacere di vederti qui :) comunque: potresti andare un po 'più in dettaglio? cosa intendi per "esterno"? – back2dos

+0

Con file .as esterni intendo classi. C'è qualcuno qui che usa as3 senza classi? PS: ci conosciamo? –

+0

Strano. Funziona perfettamente per me, indipendentemente dal fatto che sia compilato con IDE o mxmlc. PS: non personalmente, ma dalla mailing list di haXe. :) – back2dos

0

Di solito qualcosa diventa deprecato se diventa un modo nuovo e più potente per ottenere qualcosa.

Sì setTimeout è molto più semplice da configurare in alcuni casi, ma in altri casi è molto più limitato.

Vorrei usare la classe Timer, perché di solito quando qualcosa è deprecato, significa che il supporto può essere rimosso per questo in futuro, e quindi il tuo codice non funzionerà.

+0

in genere un buon ragionamento, ma è improbabile che accada con il flash player. adobe si preoccupa molto della compatibilità con le versioni precedenti e del supporto legacy. inoltre, in questo caso, è possibile riscrivere la funzione entro un paio di righe. – back2dos

+0

@ back2dos, sì hai ragione nel caso di Adobe, ma perché non seguire le buone pratiche in generale? –

+0

che altro che l'opinione di Adobe rende i timer una pratica migliore di "setTimeout"? Sono d'accordo, un 'Timer' offre più possibilità allora' setInterval' e 'setTimer', ma poi di nuovo, il bytecode AVM2 offre più possibilità di ActionScript: D Penso che' setTimeout' sia una funzione utile. Se non fosse lì, lo scriverei da solo. Per me, è buona norma che il codice sia conciso, perché ciò lo rende leggibile e comprensibile. quindi, mentre in generale sono d'accordo, la deprecazione è di solito da prendere sul serio, nel caso di ActionScript 3, sento spesso che è solo una questione di gusti. – back2dos

0

Il problema è che l'oggetto Timer non è affatto preciso ed è soggetto alle fluttuazioni del framerate. Leggi http://forums.adobe.com/message/892631. Ho creato il mio Timer (chiamato RealTimer) utilizzando l'oggetto Date ed è molto più preciso. Raccomando di fare lo stesso.

8

Timer:

  • offre un maggiore controllo, come si può registrare più listener di eventi per ricevere l'evento piuttosto che un singola con setTimeout

  • È possibile controllare l'inizio ora e
    il numero di ripetizioni (non molto utile contro setTimeout, come questo
    deve eseguire solo una volta e dopo un ritardo
    considerando il tempo immediato è stato chiamato)

  • più linee di scrivere, ancora di più se si necessità di differenziare con i parametri di classe (evento su misura per questo)
  • Uso di listener di eventi che è
    pratica standard in as3.
  • Cleaner sguardo

setTimeout:

  • più facile da usare

  • Meno codice per scrivere

  • I parametri possono essere facilmente inviati;

preferisco la classe Timer ma ho visto setTimeout viene spesso utilizzato dai programmatori.

Anche se si utilizza le librerie Interpolazione, un certo supporto in ritardo chiamata

Per esempio TweenMax TweenMax.delayedCall (2, myFunction, [ "myParam"]);

Per tutti quelli che dicono che setTimeout è deprecato, questo è non senso ..

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/utils/package.html#setTimeout%28%29

Credo che non si può vedere una qualsiasi parola chiave "deprecato" intorno setTimeout qui

2

setTimeout è funziona perfettamente bene in file .as esterni.

basta usare questo nella classe:

import flash.utils.*; 
import flash.events.TimerEvent;