我有一堂包含许多嵌入式资产的课程。

在类中,我想按名称获取资产的类定义。我尝试过使用 getDefinitionByName() 和 ApplicationDomain.currentDomain.getDefinition() 但都不起作用。

例子:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    var ClassDef:Class = getDefinitionByName(name) as Class;  //<<-- Fails
    _image = new ClassDef() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");
有帮助吗?

解决方案

这不能回答您的问题,但可以解决您的问题。我相信做这样的事情应该有效:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    _image = new this[name]() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");

我很难记住括号表示法是否适用于密封类。如果没有,一个简单的解决方案是将类标记为动态的。

其他提示

您的方法不起作用的原因是因为“Image1Class”是 多变的 名称,不是实际的 班级名称.

你可以这样得到类名

import flash.utils.getQualifiedClassName;
trace(getQualifiedClassName(Image1Class));

正如您所看到的,这意味着您的类名(应该传递到函数中的类名)类似于 MyClass_Image1Class.

您不需要使用任何花哨的 getDefinitionByName() 方法,只需动态引用它即可。在您的情况下,将“失败”行替换为:

var classDef:Class = MyClass[name] as Class;

那应该可以了。

太感谢了!我刚刚花了近 5 个小时试图让 POS getDefinitionByName 与 getQualifiedClassName 一起工作,我已经准备好扔东西了!我的最终工作代码如下所示,甚至从数组中获取字符串名称。

CreatureParam 是一个二维字符串数组;

Type 是一个整数,通过 HTML 标签发送到 flash,而 HTML 标签又通过 PHP 来自 MYSQL 数据库。

Mark1_cb 是舞台上的组合框,具有实例名称。它的输出也是一个整数。

因此,下面的代码直接从外部 swf“ArtLibrary.swf”导入类“BirdBodyColor_mc”。BirdBodyColor_mc 是从 png 图像创建的影片剪辑。请注意,您必须双击 ArtLibrary.fla 中的影片剪辑并插入第二个关键帧。影片剪辑显然需要两个帧,或者 Flash 尝试将其作为精灵导入并导致类型不匹配。

embed(source =“ artlibrary.swf”,符号=“ birdbodycolor_mc”)var birdbodycolor_mc:class;

通常我会使用此代码将这个 movieclip 类的实例放在舞台上。

myMC:MovieClip = new BirdBodyColor_mc();addChild(myMC);

var 定义:Class = this["BirdBodyColor_mc"] as Class;var Mark1:MovieClip = new Definition();

但我需要使用在数组中查找的字符串值来执行此操作。这是代码。

var 定义:Class = this[CreatureParam[Type][Mark1_cb + 2]] as Class;var Mark1:MovieClip = new Definition();

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top