start page | rating of books | rating of authors | reviews | copyrights

Book HomeActionScript: The Definitive GuideSearch this book

10.14. Refreshing the Screen with updateAfterEvent

As we learned earlier in Section 10.12, "Order of Execution", the mouseDown, mouseUp, mouseMove, keyDown, and keyUp event handlers are executed immediately upon the occurrence of those events. Immediately means immediately -- even if the event in question occurs between the rendering of frames.

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( );
}

The updateAfterEvent( ) function is available for use only with the mouseDown, mouseUp, mouseMove, keyDown, and keyUp events. It is often essential for smooth and responsive visual behavior associated with user input. Later, in Example 10-8, we'll use updateAfterEvent( ) to ensure the smooth rendering of a custom pointer. Note, however, that button events do not require an explicit updateAfterEvent( ) function call. Buttons naturally update between frames.



Library Navigation Links

Copyright © 2002 O'Reilly & Associates. All rights reserved.