Attaching movieclip class without library symbol

Even though it is late Friday/early Saturday, I’ve got to write this one down:

Through an internal implementation of ActionScript 2.0’s compiler (which compiles code into ActionScript 1.0), Peter Hall discovered this little trick.

Here’s a shortened (and more obscured) example:

Actor.as:

To test:

import Actor;
attachMovie(Actor.id, "_mc", 1);

This keeps the number of static variables to a minimum (one). Of course, this trick works only if the compiler uses the “__Packages.” prefix to the class path internally, and may not work in future versions of Flash. Nevertheless, it’s a very cool trick.

9 thoughts on “Attaching movieclip class without library symbol

  1. Sorry, i’m french 😉

    bon j’ai trouvé un petit truc sympa..
    j’ai épuré le truc vraiment sympathiquement…

    expliquation :
    EN voulant faire une classe MovieMaker, j’ai pu remarquer qu’un Object.registerClass(“__Package.name”,name) est sans effet tout seul comme ça, en dehors de la classe car la classe doit etre “initialisé” par Flash, et pour se faire, il suffit d’appeller une fonction statique de cette meme classe.. ainsi, elle sera initialisé et prise en compte par flash 🙂 d’ou l’idée de mettre le registerClass dans une fonction statique et de l’appeller au début du script, juste apres les import

    voila.. cool, vous verrez, plus besoin de propriété statique..

    alors je vous montre :

    ////////////////////////////////////////////

    mycustommc.as
    dynamic class mycustommc extends MovieClip
    {
    //Cette seule fonction statique suffira
    static function register()
    {
    Object.registerClass(“__Packages.mycustommc”,mycustommc);
    }

    function mycustommc()
    {

    this.beginFill(0xCCCCCC,50);
    this.lineStyle(1,0xFF0000,100);
    this.moveTo(0,0);
    this.lineTo(10,0);
    this.lineTo(10,10);
    this.lineTo(0,10);
    this.endFill();
    }
    function move(aX:Number,aY:Number)
    {
    this._x = aX;
    this._y = aY;
    }
    }

    ////////////////////////////////////////////

    et la, le code pour utiliser la classe :

    ////////////////////////////////////////////

    import mycustommc;

    //Appel la fonction statique.
    mycustommc.register();

    it1 = attachMovie(“__Packages.mycustommc”,”mycustommc1″,getNextHighestDepth());
    it1.move(100,100);

    it2 = attachMovie(“__Packages.mycustommc”,”mycustommc2″,getNextHighestDepth());
    it2.move(300,100);

    ////////////////////////////////////////////

    donc, ceci est juste un petit exemple.. après on pourra faire chacun nos chouettes classes moviemaker à notre gout 😉

    dites moi ce que vous en pensez!

    yves

  2. Bravo… tu es un excellent programmeur yvele… utile avec ça…

    …quelle gros pompeur !!! :-/

    La prochaine fois, n’attends pas que quelqu’un indique la source de l’article… si vraiment tu veux être utile, cite l’auteur et mets le lien !

  3. I put together a BBEdit regexp that will add the required code to all of your class files:

    FIND:
    ^([^w]*)class ([.w]+)([^{]+){

    REPLACE:
    1class 23{r1tstatic var id = (id=”__Packages.2″)+(Object.registerClass(id,2)?””:””);

Leave a Reply

Your email address will not be published. Required fields are marked *

× two = four