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

发布于 2024-11-10 06:58:00 字数 309 浏览 4 评论 0原文

在我的动作脚本文件中,我有这个:

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

如果我尝试创建一个具有以下内容的类:

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

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

这有道理吗?

In my actionscript file I have this:

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

if I try to create a class with the following:

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

I get an error that "Disk" does not exist. Is there a way to initiate the Disk class by name so it is creating a new instance of that by using a string?

Does that make sense?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最后的乘客 2024-11-17 06:58:00

关闭,但您需要稍微调整一下,如下所示:

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;

Close, but you need to tweak it just a little, like this:

var str:String = "MyObject";

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

addChild(myobj);

Something to note, this line:

var myobj:DisplayObject = new Shell();

You should replace DisplayObject with the most primitive type you can (I generally use my own base class).

Other things to note:

You'll need to have the full package path when using getDefinitionByName. eg:

getDefinitionByName("flash.display.MovieClip");

If you run into errors like this:

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

You may need to make a reference to the classes that could be created like so:

var ref1:Disk;
var ref2:Other;
var ref3:MyObject;
抽个烟儿 2024-11-17 06:58:00

只需使用 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 属性创建实例。

Just take the Disk - it's a class and can be instantiated:

var diskInstance:ByteArray = new Disk();

(it will be ByteArrayAsset because mime type is not specified in Embed.)
Embed will generate class with long obscure name, you can't get it without parsing swf, so use Disk const instead.
Update:
As I understand, you want to embed resource and give it specific class name. AFAIK, that's not possible. You can though create class Disk yourself and put Embed inside:

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

Then you can get Disk class by name and use content property to create instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文