2013-05-19 65 views
0

目前,我正在做一個小的內存遊戲多個主題卡和背景。我已經成功地使人們有可能爲1套圖像嵌入到遊戲,但我想讓它可能有更多的主題。爲了做到這一點我用這8次differen卡:在不同的類可變嵌入式源AS3

public function Theme(_c1:String) 
{ 
c1 = _c1; 
} 

現在對於特定主題我使用這個構造:

public var c1:String; 
[Embed(source = c1)] 
public var Card1:Class; 

有了這個,我做了一個構造函數,例如作爲這樣的:

var Fruit:Theme = new Theme (".../lib/Apple.jpg"); 

現在,我相信這樣做它與一個字符串C1這對圖片來源主題的一個新的對象,然後使用該字符串源,使畫面關閉它通過將其在嵌入源,但我得到這些錯誤消息:

c1 does not have a recognized extension, and a mimeType was not provided. 
Unable to transcode c1 

我如何避免這種情況?

回答

0

什麼你想要做的,是通過一個變量(發生在運行時,SWF編譯後),以嵌入元標籤這是在編譯時(之前的應用程序知道實際的主題字符串值)預處理。

有2個解決方案。每個主題都有一個新的swf文件。您可以定義爲主題的資源作爲一個常量,不是一個變量:

[Embed(source = 'path/to/resource')] 

如果你想使用一個SWF文件,你必須在運行時重新考慮應用程序的設計和負載主題,通過初始化加載器,獲取資源,從該資源創建一個新的Theme,然後開始實際的遊戲代碼。

class Theme extends EventDispatcher { 

    public static const THEME_READY = 'themeReady'; 

    private resource:Bitmap; 

    public function Theme(resourceUri:String) { 
     loadResource(resourceUri); 
    } 
    private function loadResource(path:String):void { 
     var loader:URLLoader = new URLLoader(new URLRequest(path)); 
     loader.addEventListener(Event.COMPLETE, onResourceLoaded); 
    } 
    private function onResourceLoaded(e:Event):void { 
     e.target.removeEventListener(Event.COMPLeTE, onResourceLoaded); 
     this.resource = e.target.content; 
     initialize(); 
     dispatchEvent(new Event(THEME_READY)); 
    } 
} 

遊戲初始化:

var themeResource:String = 'path/to/resource.jpg'; 
var theme:Theme = new Theme(themeResource); 
theme.addEventListener(Theme.THEME_READY, initializeGame); 
0

我不認爲這會工作。

在閃光既可以嵌入圖像用:

[Embed(source="picture.jpg")] 
private var Picture:Class; 

,或者可以動態加載(在運行時)與所述loader外部圖像。

我建議嵌入每個圖像作爲一個階級&實現你的主題類的選擇邏輯。