0

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

此类不是 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?

4

1 回答 1

1

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

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

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

stage1; stage2;

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

于 2013-03-17T20:29:10.967 回答