使用带有大型库的fla中的类生成单独的SWF

时间:2011-01-10 23:57:15

标签: flash publish flash-cs5 classname

我有一系列大文件正在发布到swc中,然后直接在flash项目中使用。可能总共有1000多个对象。随着数量的增加,最终编译的swf变得非常大,所以我只想根据需要下载每个对象的单个swf。然后,我需要能够通过最终AS项目中的classname访问和克隆对象。

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

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

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

(我确实简要地研究了xfl但看起来像编写一个脚本来执行此操作,因为一些未知数将需要更长时间,然后手动完成。)

1 个答案:

答案 0 :(得分:1)

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

例如,您可以编写一个循环遍历库中元素的脚本,并仅为为actionscript导出的动画片段导出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)的命令文件夹中,它将在界面的“命令”菜单中弹出。

这并不完美,但它提供了可以做什么的想法。首先是建立我想象的工作流程,然后为它编写脚本。

我有一些事情我不明白,我试图将其分解:

  

我有一系列大文件   那些被发表到swc的   然后直接在闪光灯中使用   项目。可能总共1000+   对象。随着数量的增长最终   编译swf变得非常大   我想下载个人的swf   每个对象仅在需要时使用。

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

  

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

您的意思是使用getDefinition

从swf文件中实例化类
  

问题是我找到的唯一方法   导出每一个是1)复制和   将其粘贴到新的fla文件中2)double   点击“编辑”它以强制它   包括,3)重置连接(类)   名字,因为它被擦除,4)发布   (即file-&gt; publish)并将其命名   瑞士法郎。

对于第1步,您是否可以右键单击MovieClip并选择ExportSWF / ExportSWC(取决于您的需要)? 我不明白你的意思是'强制它包括'。 你的意思是tick for Actionscript?谁/什么擦除链接?