使用字符串...变量启动Embed变量不存在?

时间:2011-05-30 06:37:51

标签: flash actionscript builder

在我的actionscript文件中,我有这个:

[Embed(source="assets/disk.png")]
protected static const Disk:Class;

如果我尝试使用以下内容创建一个类:

var ClassReference:Class = getDefinitionByName("Disk") as Class;

我收到“磁盘”不存在的错误。有没有办法按名称启动Disk类,所以它是通过使用字符串创建一个新的实例?

这有意义吗?

2 个答案:

答案 0 :(得分:0)

只需要取Disk - 这是一个类,可以实例化:

var diskInstance:ByteArray = new Disk();

(它将是ByteArrayAsset,因为在Embed中没有指定mime类型。)
Embed将生成具有长晦涩名称的类,如果不解析swf则无法获取它,因此请改用Disk const。
更新
据我所知,您希望嵌入资源并为其指定特定的类名。 AFAIK,这是不可能的。您可以自己创建类Disk并将Embed放入其中:

public class Disk {
    [Embed(source="assets/disk.png")]
    public static const content:Class;
}

然后,您可以按名称获取Disk类,并使用content属性创建实例。

答案 1 :(得分:0)

关闭,但你需要调整一下,就像这样:

var str:String = "MyObject";

var Shell:Class = getDefinitionByName(str) as Class;
var myobj:DisplayObject = new Shell();

addChild(myobj);

需要注意的是,这一行:

var myobj:DisplayObject = new Shell();

你应该用最原始的类型替换DisplayObject(我通常使用自己的基类)。

其他注意事项:

使用getDefinitionByName时,您需要拥有完整的程序包路径。例如:

getDefinitionByName("flash.display.MovieClip");

如果遇到这样的错误:

ReferenceError: Error #1065: Variable MyObject is not defined.

您可能需要引用可以创建的类:

var ref1:Disk;
var ref2:Other;
var ref3:MyObject;