2010-04-21 15 views
10

la documentación para flash.utils.setTimeout() estado:Timer vs setTimeout

En lugar de utilizar este método, debe tener en cuenta la creación de un objeto Timer, con el intervalo de especificado, utilizando 1 como el parámetro repeatCount (que configura el temporizador para que se ejecute solo una vez).

¿Alguien sabe si hay una ventaja (significativa) al hacerlo? Usar setTimeout es mucho más fácil cuando solo necesitas retrasar 1 llamada.

Respuesta

11

setTimeout en realidad usa una subclase Timer, la SetIntervalTimer, que es una clase interna. Puede verificar haciendo setTimeout(function():void { throw "booom"; }, 1);. Lo verás en el rastro de la pila.

Como tal, realmente no puedo ver una gran desventaja. La única diferencia es que tiene 2 llamadas anónimas en lugar de una. OTOH, en situaciones críticas de rendimiento, no debe usar ninguno (excepto un temporizador interno) para evitar la creación de instancias frecuentes de objetos TimerEvent.

Básicamente, creo que es una cuestión de gusto. Adobe decidió, el sistema de eventos de AS3 es la chispa, por lo que lo promueven.

0

Tengo entendido que setTimeout se deprecia en AS3. Tengo problemas para encontrar la fuente del código setTimeout, pero también creo que es más fácil aclarar cualquier referencia al objeto Timer, que con setTimeout (si recuerdo correctamente de AS2).

-2

setTimeout no funciona en archivos .as externos.

+0

hola. un placer verte aquí :) de todos modos: ¿podrías ir un poco más en detalle? ¿Qué quieres decir con "externo"? – back2dos

+0

Por archivos .as externos quiero decir clases. ¿Alguien está usando as3 sin clases? PD: ¿Nos conocemos? –

+0

Extraño. Funciona perfectamente para mí, sin importar si está compilado con IDE o mxmlc. PD: no personalmente, sino de la lista de correo haXe. :) – back2dos

0

Por lo general, algo queda en desuso si se convierte en una forma nueva y más poderosa de lograr algo.

Sí setTimeout es mucho más fácil de configurar en algunos casos, pero es mucho más limitado en otros casos.

Usaría la clase Timer, porque generalmente cuando algo está en desuso, significa que es posible que se elimine el soporte en el futuro, y luego su código no funcionará.

+0

en general un buen razonamiento, pero es poco probable que suceda con Flash Player. adobe realmente se preocupa mucho por la compatibilidad con versiones anteriores y el soporte heredado. también, en este caso, uno puede reescribir la función dentro de un par de líneas. – back2dos

+0

@ back2dos, sí, tiene razón en el caso de Adobe, pero ¿por qué no seguir las buenas prácticas en general? –

+0

¿Qué otra cosa que la opinión de Adobe hace que los temporizadores sean una práctica mejor que 'setTimeout'? Estoy de acuerdo, un 'Timer' ofrece más posibilidades que' setInterval' y 'setTimer', pero, de nuevo, AVM2 bytecode ofrece más posibilidades que ActionScript: D Creo que' setTimeout' es una función útil. Si no estuviera allí, lo escribiría solo. Para mí, es una buena práctica que el código sea conciso, porque eso lo hace legible y comprensible. así que, aunque generalmente estoy de acuerdo, la desaprobación generalmente se toma en serio, en el caso de ActionScript 3, a menudo siento que realmente es solo una cuestión de gusto. – back2dos

0

El problema es que el objeto Timer no es del todo preciso y está sujeto a fluctuaciones de velocidad de cuadros. Lee http://forums.adobe.com/message/892631. Creé mi propio temporizador (llamado RealTimer) usando el objeto Date y es mucho más preciso. Recomiendo hacer lo mismo.

8

Temporizador:

  • le da más control como se puede registrar más detectores de eventos a recibir el evento en lugar de uno solo con setTimeout

  • Puede controlar el inicio time y
    el número de repeticiones (no muy útil contra setTimeout, como este
    tiene que ejecutar una sola vez y después de un retraso
    teniendo en cuenta el tiempo inmediato que se llamaba)

  • más líneas para escribir, aún más si necesidad de diferenciar con parámetros de clase (evento personalizado para esto)
  • Uso de oyentes de eventos que es
    práctica estándar en as3.
  • limpiador mirada

setTimeout:

  • más fácil de usar

  • Menos código para escribir

  • Los parámetros pueden ser fácilmente enviados;

Prefiero la clase del temporizador pero he visto setTimeout que utilizan con frecuencia los programadores.

Además, si usted está usando bibliotecas Interpolación, algún apoyo retrasada llamada

Por ejemplo TweenMax TweenMax.delayedCall (2, myFunction, [ "myParam"]);

Para todos los que dicen que setTimeout está en desuso, este no es el sentido ..

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

Creo que no se puede ver ninguna "obsoleta" palabra clave en torno setTimeout aquí

2

setTimeout es trabajando perfectamente en archivos .as externos.

sólo tiene que utilizar esto en la clase:

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