2012-03-06 58 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