在Flex / AS3中,如何使用getDefinitionByName获取嵌入式资产的类定义
我有一堂课,里面有很多嵌入式资产。
在类中,我想按名称获取资产的类定义。我试过使用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");
我很难记住括号符号是否适用于密封类。如果没有,一个简单的解决方案是将类标记为动态。
回答
我们不需要使用任何精美的getDefinitionByName()方法,只需动态地引用它即可。根据情况,将" Fails"行替换为:
var classDef:Class = MyClass[name] as Class;
那应该做到的。
回答
太感谢了!我花了将近5个小时来尝试使POS getDefinitionByName与准备扔东西的getQualifiedClassName一起使用!我最终的工作代码如下所示,甚至从数组中获取字符串名称。
CreatureParam是2维的字符串数组;
Type是一个整数,它通过HTML标签发送到Flash,而HTML标签又是通过PHP来自MYSQL数据库的。
Mark1_cb是一个在舞台上的组合框,具有实例名称。它的输出也是一个整数。
因此,下面的代码直接从外部swf" ArtLibrary.swf"导入类" BirdBodyColor_mc"。 BirdBodyColor_mc是从png图像创建的动画片段。请注意,我们必须双击ArtLibrary.fla中的动画片段并插入第二个关键帧。 Movieclips显然需要两帧,否则Flash会尝试将其导入为Sprite并导致类型不匹配。
[Embed(source =" ArtLibrary.swf",symbol =" BirdBodyColor_mc")]
var BirdBodyColor_mc:Class;
通常,我会使用此代码在舞台上放置此movieclip类的实例。
myMC:MovieClip = new BirdBodyColor_mc();
addChild(myMC);
var Definition:Class = this [" BirdBodyColor_mc"]作为Class;
var Mark1:MovieClip = new Definition();
但是我需要使用在数组中查找的字符串值来执行此操作。所以这是代码。
var定义:类=此[CreatureParam [Type] [Mark1_cb + 2]]作为类;
var Mark1:MovieClip = new Definition();