AS3:使用getDefinitionByName()时“变量[x]未定义”错误

时间:2013-01-30 17:51:39

标签: actionscript-3 eval

我正在尝试使用.SWC库(从.FLA文档导出)来存储游戏的图形数据。在我的一个类中,我正在尝试附加请求级别的MovieClip的实例,但我正在尝试使用getDefinitionByName(),因此我可以根据级别编号引入正确的类。我在Flash Builder 4.7中工作,并且有问题的SWC作为构建路径库被设置为“合并到代码中”,理论上直到现在实际上可以从任何地方访问它。

但是,getDefinitionByName()无效,即使我可以确认它所评估的类是否存在且可以自由访问。

以下是我在类构造函数中处理的内容。

1:

public function MyClass() {
    var lev:MovieClip = new Level1();
}

2:

public function MyClass(id:uint) { // For this example, id == 1
    var lClass:Class = getDefinitionByName("Level"+id) as Class;
    var lev:MovieClip = new lClass();
}

理论上,#1和#2应该产生完全相同的结果,即“lev”是Level1()类的新实例,对吧?但是#1工作,#2抛出ReferenceError: Error #1065: Variable Level1 is not defined.

更令人费解的是,我在同一个类的方法中也得到了几乎完全相同的东西,唯一的区别是所述方法调用不同类的静态方法,而后者又调用getDefinitionByName( )。静态方法是否有所不同,如果是,为什么?

1 个答案:

答案 0 :(得分:6)

我从未使用getDefinitionByName(),但快速查看LiveDocs会让您看起来需要提供完整的包路径。

var lClass:Class = getDefinitionByName("Level"+id) as Class;

应该是

var lClass:Class = getDefinitionByName("com.your.package.here.Level"+id) as Class;

请参阅getDefinitionByName()