问题描述
|
在我的动作脚本文件中,我有以下内容:
[Embed(source=\"assets/disk.png\")]
protected static const Disk:Class;
如果我尝试使用以下方法创建一个类:
var ClassReference:Class = getDefinitionByName(\"Disk\") as Class;
我收到一个错误消息“磁盘”不存在。有没有一种方法可以通过名称初始化Disk类,以便它通过使用字符串创建该类的新实例?
那有意义吗?
解决方法
关闭,但是您只需要稍微调整一下,就像这样:
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;
, 只需花9英镑-这是一门课程,可以实例化:
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属性创建实例。