1

我有一系列大型 fla 文件,这些文件被发布到 swc 中,然后直接用于 flash 项目中。可能总共有 1000 多个对象。随着数量的增长,最终编译的 swf 变得相当大,所以我只想根据需要下载每个对象的单个 swf。然后我需要能够通过最终 AS 项目中的类名访问和克隆对象。

问题是我发现导出每个文件的唯一方法是 1)将其复制并粘贴到新的 fla 文件中 2)双击“编辑”以强制包含它,3)重置链接(类)名称,因为它已被擦除,4) 发布(即文件-> 发布)并命名此 swf。
对于其中的 1000 多个,这将需要相当长的时间。

虽然您可以右键单击库中的每个项目以将其保存为 swf,但它似乎不包括类名等,只是项目。一旦我下载了这个,我就无法克隆以多次使用它而不再次下载它,这是不可接受的。

是否有更快/更好的方法来生成这些 swf?

(我确实简要地研究了 xfl,但考​​虑到一些未知因素,它看起来像编写一个脚本来做到这一点,这将花费更长的时间,而不是手工完成。)

4

1 回答 1

1

你应该看看JSFL,它允许你扩展 Flash/编写一个脚本来为你自动执行这个任务。

例如,您可以编写一个脚本,该脚本循环遍历库中的元素并仅针对为动作脚本导出的电影剪辑导出 swf,并在导出完成时生成一些放置在剪贴板中的LoaderMax代码:

var doc   = fl.getDocumentDOM();
var dir   = 'file:///' + doc.path.substr(0,(doc.path.lastIndexOf('/')+1));
var lib   = doc.library;
var code  = 'var queue:LoaderMax = new LoaderMax({name:"queue"});\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 += 'queue.append( new SWFLoader("'+name+'.swf", {name:"'+name+'"));\n';
    }
}

fl.clipCopyString(code);
fl.outputPanel.trace('symbols exported as swfs, code is in your clipboard');

将其保存为 .jsfl 文件以运行它,将其放在 Flash(IDE) 的Commands文件夹中,它将在界面的 Commands 菜单中弹出。

这并不完美,但它给出了可以做什么的想法。第一件事是建立我想象的工作流程,然后为它编写脚本。

不过有几件事我不明白,我试图把它分解:

我有一系列大型 fla 文件,这些文件被发布到 swc 中,然后直接用于 flash 项目中。可能总共有 1000 多个对象。随着数量的增长,最终编译的 swf 变得相当大,所以我只想根据需要下载每个对象的单个 swf。

所以有一些资产需要稍后编码。我想一个 swc 将包含为 actionscript 导出的多个 MovieClip,并且可能有更多具有不同类型资产的 fla 文件。

然后我需要能够通过最终 AS 项目中的类名访问和克隆对象。

您的意思是使用getDefinition从 swf 文件实例化类吗?

问题是我发现导出每个文件的唯一方法是 1)将其复制并粘贴到新的 fla 文件中 2)双击“编辑”以强制包含它,3)重置链接(类)名称,因为它已被擦除,4) 发布(即文件-> 发布)并命名此 swf。

对于第 1 步,您能否不右键单击 MovieClip 并选择 ExportSWF/ExportSWC(取决于您的需要)?我不明白您所说的“强制包含”是什么意思。你的意思是勾选 Export for Actionscript 吗?谁/什么抹掉了联系?

于 2011-01-11T00:57:50.880 回答