updateAfterEvent, uso apropiado
Componentes, actionScript básico, Tutoriales, Prototypes | Febrero 28th, 2004Versión para imprimir
El script siguiente es un ejemplo de mal uso, en este caso updateAfteEvent() es ignorado.
this.onEnterFrame = function() {
// – acciones
//…
//…
updateAfterEvent();
};
Veamos un poco de teorí a y unos ejemplos que espero sirvan para entender mejor el uso correcto de updateAfterEvent().
Descripción
Actualiza la visualización (independientemente de los fotogramas por segundo establecidos para la pelí cula) cuando el usuario la llama en un controlador onClipEvent o como parte de una función o un método que el usuario pasa a setInterval. Flash ignora las llamadas a updateAfterEvent que no se encuentran en un controlador onClipEvent o que no forman parte de una función o un método pasado a setInterval.
Según el manual de referencia de Macromedia flash MX
Para que sirve
Refresca la visualización de la pelí cula independientemente de los fotogramas por segundo establecidos en la pelí cula flash.
Cuando utilizarlo
Como parte de una función o método que el usuario pasa a setInterval. Flash igonora las llamadas a updateAfterEvent() que no se encuentran en un controlador onClipEvent o que no formen parte de una función o método pasado a setInterval.
La función updateAfterEvent está disponible para utilizar con los eventos de clip de pelí cula onMouseDown(), onMouseUp(), onMouseMove() y onKeyDown()
Como funciona
Por defecto, el efecto visual de los eventos onMouseDown(), onMouseUp(), onMouseMove() y onKeyDown() no es fí sicamente mostrado por el player hasta que el siguiente fotograma disponible no ha sido procesado. Flash actúa de la siguiente forma, ejecuta fotograma a fotograma la pelí cula, si en un fotograma se incluye una acción que debiera ejecutarse en cualquier momento (independientemente del lugar de la lí nea de tiempo donde se halle el lector), esta no se procesará hasta que el o los siguientes fotogramas no hayan sido procesados, con lo que en algunos casos se puede percibir un efecto de retraso o de movimiento discontinuo.
Ejemplos
Para entender mejor el funcionamiento de updateAfterEvent(), vamos a hacer dos sencillos ejemplos, en el primer ejemplo veremos como actúa un clip de pelí cula con el evento onMouseDown. En este caso, provocaremos el movimiento de un objeto cada vez que hagamos clic en la pelí cula.
Ejemplo sin usar updateAfterEvent
- 1. Abre un documento flash nuevo
- 2. Cambia la velocidad de reproducción a 1 fotograma por segundo,
- 3. Crea un clip de pelí cula
- 4. Escribe el siguiente script
mc_miclip.onMouseDown=function(){
this._x+=10;
}
Publica la pelí cula (Ctrl. + Enter), y haz clic tan rápido como puedas, comprobarás que el clip de pelí cula avanza 10 pí xeles a intervalos de 1 segundo
Ejemplo usando udateAfterEvent()
Usando el mismo ejemplo añade la sentencia updateAfterEvent();
mc_miclip.onMouseDown = function() {
this._x += 10;
updateAfterEvent();
};
Publica la pelí cula (Ctrl. + Enter),
Como observarás, ahora el clip de pelí cula reacciona instantáneamente cada vez que haces clic, avanzando a la velocidad que imprimes al hacer clic con el ratón.
Conclusión
Podemos forzar a flash para que ejecute inmediatamente cualquier cambio visual en pantalla sin esperar a que se ejecuten los fotogramas siguientes de una pelí cula e independientemente de la velocidad de reproducción de la misma. Esto se traduce en animaciones más suaves y fluidas.
Un caso práctico puede ser el que se aplica en este ejemplo cursor personalizado
Enlace relacionados
Tutorial publicado en flashguru
updateAfterEvent Explained
Nota
Para escribir este artí culo, me he basado en la lectura de un párrafo de actionScript for Flash MX de Colin Moock
Mayo 22nd, 2004 at 6:11 pm
Una pregunta.
¿Y si lo quiero utilizar con setInterval?
Es que tengo una función que se repite cada 10 milisegundos
Saludos!
Mayo 22nd, 2004 at 7:12 pm
Hola Bernardo,
Puedes utilizarlo perfectamente si lo que necesitas es refrescar tu pantalla, aunque si es una función que se repite cada 10 segundos, no lo veo necesario, updateFaterEvent() es apropiado cuando se trata de renderizar la pantalla (por ejemplo:movimiento de objetos,etc).
Un ejemplo:
mover = function (argumento) {
if (argumento._x >= 550) {
clearInterval(idIntervalo);
return;
}
argumento._x += 1;
updateAfterEvent();
};
idIntervalo=setInterval(mover, 1, mc_miclip);
saludos