Table of Contents

14.6 MovieClip Sub-Subclasses

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:

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.


Table of Contents