我们在一个网站中托管了一个非常大的SWF,这个网站只是数百个电影/符号的存储库。我们在Loader类的开头加载这个SWF,但那时客户端将访问其中的一小部分。
是否有可能告诉装载机只在需要时下载符号? (与applicationDomain.getDefinition(...)一样)。
提前致谢。
答案 0 :(得分:1)
你不能加载swf的部分,但是,你可以生成几个较小的swfs而不是大的swf。为了做到这一点你需要知道如何在swfs中包含和排除类,这样你就可以构建一个或多个包含共享类的基本swfs,以及一大堆只包含几个类并且正在使用它们的“扩展”swfs。来自基础swfs的共享类。
这可以通过使用command-line options of mxmlc(免费flex sdk附带的actionscript / mxml编译器)来实现 - 我不知道是否可以使用Flash IDE。
当然这会使你的加载更加复杂,但它会节省很多带宽。
答案 1 :(得分: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中选择Command&gt;运行命令...并浏览到ExportSymbols.jsfl文件。
该脚本将提示您输出导出目录,然后将导出将linkageClassName指定为单独的SWF文件的所有符号。
希望有所帮助。
答案 2 :(得分:1)
不要这么认为,在使用getDefinition()之前,您可能需要加载整个swf。
我能想到的解决方法是将swf分成许多不同的方法。
通过它们包含的类来命名swf,或者在文本文件/ xml中存储一些swf文件名/包含的类对,并使用它来按名称加载资源。
看看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文件(其中类名用作文件名),并生成一个批量加载器代码段。
将其纳入Flash的最简单方法是:
生成的代码可能不完美,但它会给你一个想法,它应该足够可读,以便轻松调整。
HTH, 乔治
答案 3 :(得分:0)
如果它只是一个符号库,为什么不拆分呢?
顺便说一下,我确信这是不可能的,因为要知道符号的位置(以字节为单位),你必须下载整个容器。