2010-07-06 193 views
0

我有,我已經通過屬性聲明它爲延伸的BitmapData背景類庫PNG圖像。 當我鍵入:
var BMDClass:Class = getDefinitionByName("Background") as Class; 我得到:變量背景未定義! 但是當我做: trace(getQualifiedClassName(new Background(0,0))); 我得到:背景! 我找不出錯誤的原因。爲什麼我得到這個錯誤

回答

1

我相信這是因爲你需要有一個Background類的引用,然後才能真正獲得按名稱的定義。簡單地導入Background類不會將類編譯到您的swf中,您需要以某種方式引用它。創建類的實例是一種方法,但是您也可以在導入後引用該類。

嘗試類似...

import com.somedomain.Background; 
Background; 

這應該創建一個你類的引用,並確保它在給您的SWF編譯。

編輯顯示多個班級的用法。

如果你有多個背景類,我會建議試着讓它們堅持一個接口。然後,我會創建一個後臺工廠類,允許您從配置文件創建後臺實例。這也意味着您將能夠將所有對後臺類的引用放在工廠類中。這是工廠的樣子。

// let the compiler know we need these background classes 
import com.somedomain.backgrounds.*; 
DarkBackground; 
LightBackground; 
ImageBackground; 

class BackgroundFactory 
{ 
    public function create(type:String):Background 
    { 
     var bgClass:Class = getDefinitionByName(type) as Class; 
     return new bgClass(); 
    } 
} 

然後從你的配置得到一個背景情況下,你會做這樣的事情......

// parse your config file...not sure what format you've got it in. 

// instantiate a background factory and create an instance based on the name from your config. 
var bgFactory:BackgroundFactory = new BackgroundFactory(); 
var bg:Background = bgFactory.create(someStr); 

編輯延長例如

package com.somedomain.background 
{ 
    interface Background 
    { 
     function get img():Bitmap; 
    } 
} 

package com.somedomain.background 
{ 
    class SomeImageBackground extends Sprite implements Background 
    { 
     protected var _img:Bitmap; 

     public function SomeImageBackground():void 
     { 
      _img = new SomeAssetFromLibrary(); 
     } 

     public function get img():Bitmap 
     { 
      return _img; 
     } 
    } 
} 

使用這些外部類會讓你對圖像的來源有更多的控制。您可以將它們加載到外部,使用嵌入元數據嵌入它們,甚至可以從舞臺加載它們。

+0

我認爲你是對的。我按照你的建議和工作來測試它!但是現在getDefinitionByName的靈活性已經被阻塞了,因爲我將不得不實例化這個類,但是我想通過它的名字得到它的實例以便使用配置文件。你能提出一個解決方案嗎? – Ponty 2010-07-06 15:58:45

+0

我試着給出一個更深入的答案,你可以如何使用你的配置文件來做到這一點。讓我知道它是否合理。 – 2010-07-06 17:07:39

+0

嘿,非常感謝你給我很多想法!我還有一個小問題:你寫:import com.somedomain.backgrounds。*;但你如何把你的圖像放在那個包裏?我的意思是我請使用閃光燈庫和圖像轉換成的BitmapData的用戶定義的子類或(之前一點,我發現)的EMBED標籤,如[嵌入(源=「image.png」)] 公共Background1:類。 你如何實現在包中包含所有用戶定義的圖形類? 如果只是我之前告訴過你的類被創建,你如何定義一個接口?使用界面作爲標記?能給我看看麼? – Ponty 2010-07-06 18:06:20