This immediacy can give a movie great responsiveness, but that
responsiveness can easily be lost. By default, the visual effects of
a mouseDown, mouseUp,
mouseMove, keyDown, or
keyUp event handler are not physically rendered
by the Flash Player until the next available frame is rendered. To
really see this in action, create a single-frame movie with a frame
rate of 1 frame per second, and place a movie clip with the following
code on stage:
onClipEvent (mouseDown) {
_x += 2;
}
Then, test the movie and click the mouse as fast as you can.
You'll see that all your clicks are registered, but the movie
clip moves only once per second. So, if you click 6 times between
frames, the clip will move 12 pixels to the right when the next frame
is rendered. If you click 3 times, the clip will move 6 pixels. Each
execution of the mouseDown handler is registered
between frames, but the results are displayed only when each frame is
rendered. This can have dramatic effects on certain forms of
interactivity.
Fortunately, we can force Flash to immediately render any visual
change that takes place during a user-input event handler without
waiting for the next frame to come around. We simply use the
updateAfterEvent( ) function from inside our
event handler, like this:
onClipEvent (mouseDown) {
_x += 2;
updateAfterEvent( );
}