我正在尝试根据从函数启动发送给我的变量创建一个类的实例。
此类不是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?
答案 0 :(得分:1)
getDefinitionByName
函数返回类引用。试试这个:
var Clazz:Class = getDefinitionByName("stage" + _stage) as Class;
var s1:tut_stage = new Clazz() as tut_stage;
此外,您必须确保在编译时将类包含在SWF中。只需在某处引用它们就可以强制Flash包含它们。
stage1; stage2;
您需要为要包含的任何类添加引用,但您只需要执行一次。