4
votes

I've got a string which, in run-time, contains the name of a class that I want to instantiate. How would I do that?

I read suggestions to use flash.utils.getDefinitionByName():

var myClass:Class = getDefinitionByName("package.className") as Class;
var myInstance:* = new myClass();

However, that gives me the following error:

[Fault] exception, information=ReferenceError: Error #1065: Variable className is not defined.

2
Your class still has to be defined elsewhere in order for Flash to get the definition, because all it does is check the current application domain. This is something I've struggled with and given up on before now. - shanethehat

2 Answers

6
votes

The easiest method I've come up with is to simply write the classnames out, separated by semicolons, anywhere in your project.

e.g. I create an Assets.as file with this in it:

package {   

public class Assets {       

    // To avoid errors from the compiler when calling getDefinitionByName
    // just list all of the classes that are not otherwise referenced in code:
    Balloon;
    Cloud;
    FlyingHorse;
    FlyingPig;
    UFO;
    Zeppelin;       
}
}

Full code example/tutorial on this is here: http://producerism.com/blog/flashpunk-dame-and-lua-tutorial-part-6/

1
votes

The other option is to use the mxmlc -includes compiler argument like this:

-includes=com.mydomain.package.MyClass

http://blogs.adobe.com/cantrell/archives/2010/09/loading-classes-dynamically-in-actionscript-3.html