We'll conclude our exploration of ActionScript events and event handlers with a few real-world examples. These are simple applications, but they give us a sense of how flexible event-based programming can be. The last two examples are available for download from the online Code Depot.
Example 10-7 makes a clip shrink and grow.
onClipEvent (load) { var shrinking = false; var maxHeight = 300; var minHeight = 30; } onClipEvent (enterFrame) { if (_height < maxHeight && shrinking == false) { _height += 10; _width += 10; } else { shrinking = true; } if (shrinking == true) { if (_height > minHeight) { _height -= 10; _width -= 10; } else { shrinking = false; _height += 10; // Increment here so we don't _width += 10; // miss a cycle } } }
Example 10-8 simulates a custom mouse pointer by hiding the normal system pointer and making a clip follow the mouse location around the screen. In the example, the mouseDown and mouseUp handlers resize the custom pointer slightly to indicate mouseclicks.
onClipEvent (load) { Mouse.hide( ); } onClipEvent (mouseMove) { _x = _root._xmouse; _ y = _root._ymouse; updateAfterEvent( ); } onClipEvent (mouseDown) { _width *= .5; _height *= .5; updateAfterEvent( ); } onClipEvent (mouseUp) { _width *= 2; _height *= 2; updateAfterEvent( ); }
Finally, simply to prove the power of the ActionScript movie clip event handlers, Example 10-9 turns a movie clip into a customized button using mouseMove to check for rollovers, mouseDown and mouseUp to check for button clicks, and the hitTest( ) function to make hit detection a snap. This example assumes that the clip with the handlers has three keyframes labeled up, down, and over (corresponding with the usual button states).
onClipEvent (load) { stop( ); } onClipEvent (mouseMove) { if (hitTest(_root._xmouse, _root._ymouse, true) && !buttonDown) { this.gotoAndStop("over"); } else if (!hitTest(_root._xmouse, _root._ymouse, true) && !buttonDown) { this.gotoAndStop("up"); } updateAfterEvent( ); } onClipEvent (mouseDown) { if (hitTest(_root._xmouse, _root._ymouse, true)) { buttonDown = true; this.gotoAndStop("down"); } updateAfterEvent( ); } onClipEvent (mouseUp) { buttonDown = false; if (!hitTest(_root._xmouse, _root._ymouse, true)) { this.gotoAndStop("up"); } else { this.gotoAndStop("over"); } updateAfterEvent( ); }
Copyright © 2002 O'Reilly & Associates. All rights reserved.