在AS3中动态创建类的实例(不在库中)

时间:2013-03-17 20:23:00

标签: actionscript-3 actionscript

我正在尝试根据从函数启动发送给我的变量创建一个类的实例。

此类不是displayObject,不在Flash库中。这似乎意味着以下内容不起作用:

private function BasicControl(_stage:int):void {
        var s1:tut_stage = getDefinitionByName("stage"+_stage) as tut_stage;
        trace(s1);
        s1.Begin();
    }

这导致:

ReferenceError: Error #1065: Variable stage1 is not defined.
at global/flash.utils::getDefinitionByName()
at kazo::Main/BasicControl()[B:\Users\Kevin SSD\client\temp_tutorial\preview_src\kazo\Main.as:76]
at kazo::Main/SWFLoadComplete()[B:\Users\Kevin SSD\client\temp_tutorial\preview_src\kazo\Main.as:113]

但是,如果写成:

var s1:tut_stage = new stage1;

这样可以正常工作。

如果一个类不在库中,如何动态调用它?似乎我所有的努力都没有结果。我能让这个工作的唯一方法就是使用可怕的工作:

private function BasicControl(_stage:int):void {
        var s1:tut_stage;

        switch(_stage) {
            case 1:
                s1 = new stage1;
                break;

            case 2:
                s2 = new stage2;
                break;

        }
    }

我必须在这里遗漏一些东西 - 我应该如何在这个实例中调用stage1?

1 个答案:

答案 0 :(得分:1)

getDefinitionByName函数返回类引用。试试这个:

var Clazz:Class = getDefinitionByName("stage" + _stage) as Class;
var s1:tut_stage = new Clazz() as tut_stage;

此外,您必须确保在编译时将类包含在SWF中。只需在某处引用它们就可以强制Flash包含它们。

stage1; stage2;

您需要为要包含的任何类添加引用,但您只需要执行一次。