Categories
ActionScript

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:

class Actor extends MovieClip {
    static var id = (id="__Packages.Actor")+
        (Object.registerClass(id,Actor)?"":"");

    public function Actor() {
        trace("Action!");
    }
}

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 replies on “Attaching movieclip class without library symbol”

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

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 !

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)?””:””);

hein? mais j’ai rien copié du tout..

enfin j’ai fait copié collé de mon propre exemple c’est tout..

bah…

Leave a Reply

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