2011-12-29 64 views
1

另一flashbuilder brainbreaker爲我的源數據類型...什麼是從圖像

我有一個contstructor應該只改變圖像的源類。

[Bindable] 
    [Embed(source='../pictures/test.jpg')] 
    private var _picture:Class; 

    public function Test(newSource:*****) 
    { 
     _picture.source = newSource; 
    } 

(圖像不是一個圖像,而是一類,我意識到了這一點,它的目的是如此:-))

的問題是,當我調用構造函數,讓我們說:

var test:Test = new Test(pictureAtStage.source); 

Flashbuilder會給出錯誤,becouse我不能告訴編譯數據類型「newSource的」在構造函數都會有...

*編輯: 當我使用_pic ture.source,嵌入式源代碼似乎沒有改變...?

任何人都知道答案?

+1

好吧,沒必要回答這個問題:數據類型設置爲對象做了詭計......(我會在八個小時內發佈答案......因爲我是新來的stackoverflow我不能在8小時內回答我的onwn問題) – 2011-12-29 22:49:30

回答

1

我們在談論mx.controls.Image?如果是這樣,那麼圖像的來源可以是:一個類,一個位圖(而不是一個BitmapData),一個字符串(在這種情況下,假設你想加載它,而不是使用嵌入的)。如果你想爲所有這些找到一個共同的分母,那麼Object就是那個類,然而,我寧願把它限制在你的用例特定的地方。

但是,如果我可以提供任何建議......不要使用mx.controls.Image,即使對於Flex框架,它也太臃腫。如果它必須是UIComponent - 擴展UIComponent並讓源代碼爲BitmapData類型 - 這樣您將能夠更好地管理資源 - 例如,您可以重用相同的實際圖像。然後,您可以使用控件的graphics屬性來顯示圖像。

另一個建議,如果你還在這裏:)不要使用[Bindable],特別是它的簡短版本,特別是不要在一個私有變量 - 你將節省自己的無數小時的調試挫敗...除了,在你的情況下,你不會改變變量的值...

你還在嗎?那麼,不要在變量上使用[Embed],在類定義上使用它 - 對你來說稍微多一些工作,但這可能會使你的代碼更加便攜。如果您嵌入類中,編譯器將不會生成一個愚蠢的「something-something-Asset」類,它將使用Bitmap或BitmapData - 無論您的類是否延伸。因此,您將不會引入對Flex框架的依賴,並且通常您可以更好地控制代碼。

編輯:上面的是假設_picture(類)變量和_picture(函數中使用的某些變量)不是同一件事情。但如果它們是相同的東西,那麼Class類是動態的,這意味着您可以在運行時爲其添加屬性(不知道爲什麼,這是由Adobe設計決定的...),但是,編譯器將作爲如果它是不可能的,所以你會解決的是通過反射將屬性:

var _picture:Class = Sprite; 
_picture["source"] = whatever; 
trace(Sprite["source"]); 
+0

我試圖達到的目標是添加我自己定製的子彈到AMChart。你可以在這裏找到這樣一個例子:http://flex.amcharts.com/lib/examples/customBulletsV4.mxml 這裏的自定義項目符號似乎是一個類(它嵌入了* .swf源文件),所以我想象我的「自定義項目符號」也必須是一個類... – 2011-12-30 11:15:06

+0

該圖的數據提供者是一個列表,其中包含我自己定義的類(所以_picture是此類的一個元素(變量)),搜索getter圖片(在這種情況下,我讓getter返回一個類) – 2011-12-30 11:21:23

+0

這就是事情:我不希望「custombullet」被嵌入,因爲它需要由用戶在圖中的每個元素中選擇...我'我試圖用這種方式創建_picture類,以便讀取「圖像源」。到目前爲止,我沒有成功創建_picture類看起來像嵌入類...我想我需要設置類的位圖數據,以改變圖片(項目符號) – 2011-12-31 11:22:22

1

這確實有點混淆,它將是BitmapAsset的類型,它延伸Bitmap。所以這些都會起作用。

1

因爲我很新的flashbuilder我並沒有看到明顯的解決方案...

我的問題的第一部分,該解決方案(編輯前): 設置數據類型對象的伎倆:

[Bindable] 
[Embed(source='../pictures/test.jpg')] 
private var _picture:Class; 

public function Test(newSource:Object) 
{ 
    _pucture.source = newSource; 
}