我们有一个非常大的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的符号。
希望有所帮助。