我现在已经通过 hack 解决了这个问题,但更想知道是否有正确的方法来做到这一点。我有一个生成 MovieClip 的函数,它是 map 的图 block ,然后我将其附加到舞台上。它根据字符串变量确定要使用的图 block 类别,如下所示:
// symbolID holds our class name, determined by logic above
var newClass:Class = getDefinitionByName(symbolID) as Class;
var newtile:MovieClip = new newClass();
这有效,但仅如果该类的实例已存在于代码中的其他位置。它可以在任何地方——在文档类中,在辅助类的某些隐藏函数中,这似乎并不重要。如果没有,Flashdevelop 会抛出错误 1065,“变量(变量)未定义”。我提到我正在使用 Flashdevelop,因为它看起来可能是特定于编译器的,但我不确定。
我的黑客修复是这样做:
var a:baseTile;
a as anotherTile;
a as aThirdTile;
等等,这可行,但如果我最终要拥有数百个这样的图 block 类,那么绝对不理想。
编辑:我应该补充一点,这些影片剪辑来自 .swc 文件,该文件来自 Flash Professional。
最佳答案
你必须使用“黑客”。
getDefinitionByName()
只能使用运行时存在的类。不幸的是,如果您不使用类,它将不会被编译并且在运行时不会存在。
图书馆符号使解决这个问题变得更容易。如果您选中在给定帧自动提供它们的复选框,您只需确保您的 getDefinitionByName()
调用在该帧期间或之后完成。
关于actionscript-3 - Actionscript 3 getDefinitionByName 看不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764746/