2010-05-20 90 views
0

我們有一個非常大的SWF託管在一個網站,這只是一個數百電影/符號的存儲庫。我們在Loader類的開頭加載這個SWF,但那時客戶端將訪問其中的很少一部分。是否可以在不需要下載的情況下訪問遠程SWF?

是否可以告訴裝載程序僅在需要時下載符號? (與applicationDomain.getDefinition(...)一樣)。

在此先感謝。

回答

1

不這麼認爲,您可能需要在使用getDefinition()之前加載整個swf。

我能想到的一個解決方法是將swf分成許多不同的部分。

要麼通過它們包含的類來命名swf,要麼將一些swf文件名/包含的類對存儲在文本文件/ xml中,並使用它來按名稱加載資源。

看看BulkLoader,它可以爲您節省一些時間。

如果您正在使用Flash IDE中,我寫了一個簡單的腳本JSFL,應該讓事情 那麼單調乏味:

var doc = fl.getDocumentDOM(); 
var dir = 'file:///' + doc.path.substr(0,(doc.path.lastIndexOf('/')+1)); 
var lib = doc.library; 
var code = 'var loader : BulkLoader = new BulkLoader("assets");\n'; 
var items = lib.items; 
var iNum = items.length; 
var path; 
var name; 

fl.outputPanel.clear(); 

for(var i = 0 ; i < iNum ; i++){ 
    if(items[i].linkageExportForAS){ 
     name = items[i].linkageClassName; 
     path = dir+name+'.swf'; 
     items[i].exportSWF(path); 
     code += 'loader.add("'+(name+'.swf')+'", {id:"'+name+'"});\n'; 
    } 
} 

fl.clipCopyString(code); 
fl.outputPanel.trace('symbols exported as swfs, code is in your clipboard'); 

它所做的是循環認爲庫項目,併爲那些符號導出爲actionscript,它會導出一個swf文件(其中Class名稱用作文件名),並生成批量加載器片段。得到它到Flash

最簡單的方法是這樣的:

  1. 創建一個新的閃存的JavaScript 文件(文件>新建>閃存 JavaScript文件)
  2. 將代碼粘貼
  3. 保存文件爲ASSymbolsToFiles或其他。它的文件應爲 默認爲Commands文件夾, 這意味着您可以通過 命令菜單使用它。如果需要,您還可以設置鍵盤快捷鍵 。

生成的代碼可能不完美,但它給了你一個想法,它應該足夠易讀,以便於調整。

HTH, George

0

如果它只是一個符號庫,爲什麼不分割它?

順便說一句,我敢肯定,這是不可能的,因爲知道符號在哪裏(以字節爲單位),你必須下載整個容器。

1

您不能加載swf的部分,但是,您可以生成幾個較小的swfs而不是較大的swf。爲了做到這一點,您需要知道如何在swfs中包含和排除類,以便您可以構建一個或多個包含共享類的基本swf以及一大堆只包含幾個類的「擴展」swf,並使用來自基礎swf的共享類。

這可以通過使用command-line options of mxmlc(免費flex sdk附帶的actionscript/mxml編譯器)來實現 - 我不知道是否可以使用Flash IDE。

當然這會讓你的加載更復雜一些,但它會節省很多帶寬。

1

我不認爲這是可能的。但是,您可以使用JSFL將庫中的所有符號導出到單獨的SWF文件。

要做到這一點,下面的保存爲「ExportSymbols.jsfl」

//prompt user for directory to export symbols to 
var dir = fl.browseForFolderURL('Select export folder'); 

//get all the library items 
var symbols = fl.getDocumentDOM().library.items; 

for (var i=0; i<symbols.length; i++) { 
    var symbol = symbols[i]; 
    var name = symbol.name; 
    var linkageClassName = symbol.linkageClassName; 
    if (linkageClassName != "") { 
     var filename = dir + "/" + linkageClassName + ".swf"; 
     symbol.exportSWF(filename); 
     fl.trace("Exported '" + name + "' to '" + filename + "'"); 
    } 
} 

然後,在Flash中選擇命令>運行命令並瀏覽到ExportSymbols.jsfl文件。

該腳本會提示您輸出一個導出目錄,然後導出所有具有指定爲獨立SWF文件的linkageClassName的符號。

希望有所幫助。

相關問題