10.13 Refreshing the Screen with updateAfterEvent( )

ActionScript for Flash MX: The Definitive Guide, 2nd Edition
By Colin Moock
Chapter 10.  Events and Event Handling

The MovieClip event handler properties onMouseDown( ), onMouseUp( ), onMouseMove( ), onKeyDown( ), and onKeyUp( ) are executed immediately upon the occurrence of their corresponding 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 improper coding. By default, the visual effects of onMouseDown( ), onMouseUp( ), onMouseMove( ), onKeyDown( ), and onKeyUp( ) are not physically rendered by the Flash Player until the next available frame is rendered. To see this in action, create a single-frame movie with a frame rate of 1 frame per second. Place a movie clip named circle_mc on the Stage and attach the following code to frame 1 of the main timeline:

circle_mc.onMouseDown = function ( ) {   this._x += 10; }

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 still moves only once per second. So, if you click 6 times between frames, the clip will move 60 pixels to the right when the next frame is rendered. If you click 3 times, the clip will move 30 pixels. The cumulative effect of each execution of the onMouseDown( ) event is "remembered" 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:

circle_mc.onMouseDown = function ( ) {   this._x += 10;   updateAfterEvent( ); }

The updateAfterEvent( ) function is available for use only with the onMouseDown( ), onMouseUp( ), onMouseMove( ), onKeyDown( ), and onKeyUp( ) MovieClip events and the setInterval( ) function. It is often essential for smooth and responsive visual behavior associated with user input. Later, in Example 10-3, 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. Button events update the Stage automatically between frames.

The onMouseDown( ), onMouseMove( ), and onMouseUp( ) listeners were added to the Mouse object in Flash Player 6. Likewise, the onKeyDown( ) and onKeyUp( ) listeners were added to the Key object. Generally, these Mouse and Key listeners are preferred over the analogous MovieClip events. However, in Flash Player 6, the updateAfterEvent( ) function can be used only in MovieClip events. Hence, when a screen refresh is required between frames, the MovieClip event handlers must be used. Future versions of the Player will likely include support for updateAfterEvent( ) from Mouse and Key listeners.

     



    ActionScript for Flash MX. The Definitive Guide
    ActionScript for Flash MX: The Definitive Guide, Second Edition
    ISBN: 059600396X
    EAN: 2147483647
    Year: 2002
    Pages: 780
    Authors: Colin Moock

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net