是否可以访问远程SWF而无需下载?

时间:2010-05-20 10:06:54

标签: actionscript-3 flash load

我们在一个网站中托管了一个非常大的SWF,这个网站只是数百个电影/符号的存储库。我们在Loader类的开头加载这个SWF,但那时客户端将访问其中的一小部分。

是否有可能告诉装载机只在需要时下载符号? (与applicationDomain.getDefinition(...)一样)。

提前致谢。

4 个答案:

答案 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的最简单方法是:

  1. 创建一个新的 Flash JavaScript 文件(文件&gt;新&gt; Flash JavaScript文件)
  2. 粘贴代码
  3. 将文件另存为ASSymbolsToFiles。它应该是文件 默认为Commands文件夹, 这意味着你可以通过它 命令菜单。你也可以 如果需要,设置键盘快捷键。
  4. 生成的代码可能不完美,但它会给你一个想法,它应该足够可读,以便轻松调整。

    HTH, 乔治

答案 3 :(得分:0)

如果它只是一个符号库,为什么不拆分呢?

顺便说一下,我确信这是不可能的,因为要知道符号的位置(以字节为单位),你必须下载整个容器。