Adding any old library object to a display list

Ok, so you know this used to be pretty straightforward in AS2:

var mc:MovieClip = attachMovie(linkageid, newname, depth);

By in AS3, all of you linked library objects are now classes, so you need to do this with the class name:

var mc:Thingy = new Thingy();

What if you want to attach any random movieclip at runtime but you don’t know what class it will be ahead of time. Maybe its driven by an external data source? You could have a nice if/else or switch block and call the class based on a variable, but that’s a pain in the ass.

So, here is a function that I came up with to make it easier:

function getArbitraryLibraryObject(n:String):Object {
var objC:Class = Class(this.loaderInfo.applicationDomain.getDefinition(n));
var obj:Object = Object(new objC());
return obj;
}
var mc:MovieClip  = getArbitraryLibraryObject(linkage) as MovieClip;

Let me know if there’s an easier way to go about it, but I haven’t run across one.

In my Ramen player, I’m using this to call sound effects and page to page transition effects.

Leave a Reply