2

我现在已经解决了这个问题,但更想知道是否有正确的方法来做到这一点。我有一个生成 MovieClip 的函数,它们是地图的拼贴,然后我将其附加到舞台上。它根据字符串变量确定要使用的瓷砖类别,如下所示:

// symbolID holds our class name, determined by logic above
var newClass:Class = getDefinitionByName(symbolID) as Class;
var newtile:MovieClip = new newClass();

这有效,但前提是该类的实例已经存在于代码中的其他地方。它可以在任何地方——在文档类中,在辅助类的某些隐藏函数中,这似乎无关紧要。如果没有,Flashdevelop 会抛出错误 1065,“未定义变量(变量)”。我提到我正在使用 Flashdevelop,因为它看起来可能是特定于编译器的,但我不确定。

我的 hack 修复是这样做的:

var a:baseTile;
a as anotherTile;
a as aThirdTile;

等等,这是可行的,但如果我最终要拥有数百个这样的瓦片类,那肯定不是理想的。

编辑:我应该补充一点,这些影片剪辑来自一个来自 Flash Professional 的 .swc 文件。

4

3 回答 3

2

你必须使用'hack'。

getDefinitionByName()只能与运行时存在的类一起使用。不幸的是,如果你不使用一个类,它就不会被编译并且不会在运行时存在。

图书馆符号使解决这个问题更容易一些。如果您选中让它们在给定帧自动可用的框,您只需确保getDefinitionByName()在该帧期间或之后完成您的呼叫。

在此处输入图像描述

于 2013-05-27T00:04:58.367 回答
1

虽然 SWC 库可以包含要包含在构建路径中的特定类,但 Flash 编译器不会将未引用的类链接到 SWF;因此,需要一个链接库。

保留类的示例链接:

/** linkage library */
private static const classA:ClassA;
private static const classB:ClassB;
private static const classC:ClassC;

另一种选择是从RSL(运行时共享库​​)加载类。

于 2013-05-27T00:06:17.437 回答
1

基本上是的,您需要在代码中的某处对该类进行严格引用。您甚至可以在其他地方将该引用设为“未引用”。我有一百个这样的类,我必须Array在项目内部的某个地方制作一个这样的类。我将它放在调用的函数旁边,getDefinitionByName()以确保类在该函数中可用。

private static const dummy:Array=[Rock01, Rock02,...,Gem01,Gem02,...];

因此,您可以使用这样的 Array 列出您在项目中拥有并希望通过getDefinitionByName().

于 2013-05-27T05:42:51.420 回答