14.6 MovieClip Sub-Subclasses

ActionScript for Flash MX: The Definitive Guide, 2nd Edition
By Colin Moock
Chapter 14.  Movie Clip Subclasses and Components

Just like a regular class, a MovieClip subclass can itself be extended by another subclass. When a parent class is defined outside of its corresponding movie clip symbol (as in the very first Ball example in this chapter), its child subclass can be defined by:

  • Setting the child's prototype to a new parent instance

  • Registering the child class with its symbol via Object.registerClass( )

Remember also to invoke the parent's constructor function from the child constructor. For example, the following code shows how to create a subclass, Baseball, of our existing class, Ball:

// Baseball class constructor org.moock.Baseball = function ( ) {   // ... init code ...   // Invoke Ball class constructor   super( ); } // Set Baseball's superclass to Ball org.moock.Baseball.prototype = new org.moock.Ball( ); // Associate the Baseball class with its own Library symbol Object.registerClass("baseballSymbol", org.moock.Baseball);

However, when both the subclass (Ball) and the sub-subclass (Baseball) are defined inside a movie clip symbol's #initclip block, we must ensure that the subclass is initialized before any of the sub-subclasses. To do so, we use the order parameter of the #initclip pragma, which is a nonnegative integer specifying the execution order of a particular #initclip block, relative to all other #initclip blocks in the movie. Those #initclip blocks with lower order numbers are always executed before those with higher ones. All #initclip blocks without a specified order are executed before those with a specified order.

For example, to create a Baseball class inside the movie clip baseballSymbol, we must change the first line of our Ball class code to:

#initclip 0

Then we can create our Baseball class as follows:

// Use a higher #initclip order than Ball uses, guaranteeing that Ball // will be available before this code runs. #initclip 1 // =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = // Create namespace in which to store classes // =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = if (_global.org =  = undefined) {   _global.org = new Object( ); } if (_global.org.moock =  = undefined) {   _global.org.moock = new Object( ); } // =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = // Create the Baseball class // =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = /*  * Baseball Class. Extends Ball.  *   Version: 1.0.0  *   Desc: A movie clip subclass for depicting baseballs  *  * Constructor Params:  *   signature       -The ball's signature  *   * Methods:  *   setSignature( )  -Set the signature on the ball  */ /*  * Class Constructor. Parameters are passed by attachMovie( )'s initObj.  */ org.moock.Baseball = function ( ) {   // Create Instance properties.   this.sig = null;   // Initialize instance before calling Ball constructor. (Otherwise,   // Ball will delete the params object before we get a chance to use it.)   this.setSignature(this.params.signature);   // Invoke Ball class constructor.   super( );   // No need to delete params object, because the Ball constructor does that. }; /*  * Set Ball as Baseball's superclass.  */ org.moock.Baseball.prototype = new org.moock.Ball( ); /*  * Associate the Library's baseballSymbol with the Baseball class  */ Object.registerClass("baseballSymbol", org.moock.Baseball); /*  * Instance Methods  */ /*  * Method: Ball.setSignature( )  *   Desc: Sets the ball's signature  *  * Params:   *   newSig     -The ball's new signature  */ org.moock.Ball.prototype.setSignature = function (newSig) {   this.sig = newSig; }; #endinitclip

Note that multiple #initclip blocks can share a single order position. For example, if we create three subclasses of Ball, we can set all of their #initclip order parameters to 1. All that matters is that the Ball's #initclip order is lower than all its subclasses.

     



    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