2012-03-06 60 views
0

首先,我宁愿在AS3 n00b,所以我很抱歉,如果这是一个可怕的问题。我搜索了并找不到直接参考/解决这个确切问题。AS3动态引用嵌入式图形?

我的问题: 我试图嵌入一个类(“Assets.as”)中的所有有关我的显卡,这将有一个静态方法,通过名称检索这些嵌入式图形。

我已经试过:

Assets.as

package 
{ 
    [...imports...] 

    public class Assets 
    {  
     [Embed(source="assets/images/l_peak.png")] 
     public static const l_peak:Class; 

     public static function getByName(pName:String):Bitmap 
     { 
      var retClass:Class = flash.utils.getDefinitionByName(pName) as Class; 
      return new Bitmap(new retClass()); 
     } 
    } 
} 

然而,这会返回一个空对象。任何我工作的方式,getDefinitionByName()或者返回null或者说没有一个名为的对象(即“l_peak”)。

我知道你可以使用loader()来动态地使用图形来做到这一点,但我希望能够嵌入这些图形,并简单地通过它们的名字动态获取它们。

任何帮助将不胜感激!

+0

不要以为你所需要的位图转换。尝试返回这个[pName]; – 2012-03-07 00:21:07

回答

2

你为什么不尝试:

return Assets[pName]; 
+0

谢谢!这就是我一直在寻找的......由于某种原因,我无法找到它的参考,或者我忽视了我所做的一个。 – 2012-03-07 00:52:12

1

我相信该属性必须是一个公共变量不是const,但我可能是错的。 作为测试尝试只是公共变种

[Embed(source="assets/images/l_peak.png")] 
public var l_peak:Class; 

此外这篇文章可以帮助你: http://www.bit-101.com/blog/?p=853

如果仍然有一个问题可能是与路径到您的资产的问题。从live docs

指定要嵌入的资产的名称和路径;相对于包含嵌入语句的文件的绝对路径或路径。嵌入式资产必须是本地存储的资产。因此,您无法指定要嵌入的资产的网址。 有关设置路径的更多信息,请参阅关于设置嵌入资产的路径。

+0

还是说“l_peak”没有定义?奇。 – 2012-03-06 22:14:09

+0

检查以确保您的资产路径正确。我相信路径是相对于您正在编辑的AS文件的位置。我已编辑我的答案,包括此选项 – mbaker3 2012-03-06 22:42:36

+0

路径很好,我可以通过(新l_peak())初始化它,如果我喜欢。 – 2012-03-07 00:30:34