在我的actionscript文件中,我有这个:
[Embed(source="assets/disk.png")]
protected static const Disk:Class;
如果我尝试使用以下内容创建一个类:
var ClassReference:Class = getDefinitionByName("Disk") as Class;
我收到“磁盘”不存在的错误。有没有办法按名称启动Disk类,所以它是通过使用字符串创建一个新的实例?
这有意义吗?
答案 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;