我有一个包含许多嵌入资源的课程。
在课堂上,我希望按名称获取资产的类定义。我尝试过使用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");
答案 0 :(得分:8)
这不能解答您的问题,但它可以解决您的问题。我相信做这样的事情应该有效:
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");
我很难记住括号符号是否适用于密封类。如果没有,一个简单的解决方案是将类标记为动态。
答案 1 :(得分:3)
您的方法不起作用的原因是“Image1Class”是变量名称,而不是实际的类名。
你可以像这样得到类名
import flash.utils.getQualifiedClassName;
trace(getQualifiedClassName(Image1Class));
您可能会看到,这意味着您的类名(应该传递给函数的类名)类似于MyClass_Image1Class
。
答案 2 :(得分:2)
您不需要使用任何花哨的getDefinitionByName()方法,只需动态引用它。在您的情况下,将'Fails'行替换为:
var classDef:Class = MyClass[name] as Class;
那应该这样做。
答案 3 :(得分:0)
非常感谢你!我花了差不多5个小时试图让POS getDefinitionByName与我准备扔东西的getQualifiedClassName一起工作!!我的最终工作代码看起来像这样,甚至从数组中获取字符串名称。
CreatureParam是一个2维的字符串数组;
Type是一个整数,通过HTML标记发送到flash,该标记通过PHP转换为MYSQL数据库。
Mark1_cb是舞台上的组合框,具有实例名称。它的输出也是一个整数。
所以这个代码直接在下面从外部swf“ArtLibrary.swf”导入类“BirdBodyColor_mc”。 BirdBodyColor_mc是从png图像创建的动画片段。请注意,您必须双击ArtLibrary.fla中的动画片段并插入第二个关键帧。 Movieclips显然需要两个帧或flash尝试将其作为精灵导入并导致类型不匹配。
[Embed(source =“ArtLibrary.swf”,symbol =“BirdBodyColor_mc”)] var BirdBodyColor_mc:Class;
通常我会使用此代码在舞台上放置此movieclip类的实例。
myMC:MovieClip = new BirdBodyColor_mc(); 的addChild(myMC);
var定义:Class = this [“BirdBodyColor_mc”]作为Class; var Mark1:MovieClip = new Definition();
但我需要使用在我的数组中查找的字符串值来执行此操作。所以这是代码。
var定义:Class = this [CreatureParam [Type] [Mark1_cb + 2]]为Class; var Mark1:MovieClip = new Definition();