2010-05-20 65 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的符号。

希望有所帮助。

相关问题