我們有一個非常大的SWF託管在一個網站,這只是一個數百電影/符號的存儲庫。我們在Loader類的開頭加載這個SWF,但那時客戶端將訪問其中的很少一部分。是否可以在不需要下載的情況下訪問遠程SWF?
是否可以告訴裝載程序僅在需要時下載符號? (與applicationDomain.getDefinition(...)一樣)。
在此先感謝。
我們有一個非常大的SWF託管在一個網站,這只是一個數百電影/符號的存儲庫。我們在Loader類的開頭加載這個SWF,但那時客戶端將訪問其中的很少一部分。是否可以在不需要下載的情況下訪問遠程SWF?
是否可以告訴裝載程序僅在需要時下載符號? (與applicationDomain.getDefinition(...)一樣)。
在此先感謝。
不這麼認爲,您可能需要在使用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
最簡單的方法是這樣的:
生成的代碼可能不完美,但它給了你一個想法,它應該足夠易讀,以便於調整。
HTH, George
如果它只是一個符號庫,爲什麼不分割它?
順便說一句,我敢肯定,這是不可能的,因爲知道符號在哪裏(以字節爲單位),你必須下載整個容器。
您不能加載swf的部分,但是,您可以生成幾個較小的swfs而不是較大的swf。爲了做到這一點,您需要知道如何在swfs中包含和排除類,以便您可以構建一個或多個包含共享類的基本swf以及一大堆只包含幾個類的「擴展」swf,並使用來自基礎swf的共享類。
這可以通過使用command-line options of mxmlc(免費flex sdk附帶的actionscript/mxml編譯器)來實現 - 我不知道是否可以使用Flash IDE。
當然這會讓你的加載更復雜一些,但它會節省很多帶寬。
我不認爲這是可能的。但是,您可以使用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的符號。
希望有所幫助。