2011-01-10 40 views
1

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

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

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

有没有更快/更好的方法来产生这些瑞士法郎的?

(我没考虑XFL简单,但它看起来就像写一个脚本来做到这一点给出了一些未知的出现将需要更长的时间,然后只是做手工。)

回答

1

你应该JSFL看看哪些允许您扩展Flash /编写一个脚本,以便为您自动执行此任务。

例如,您可以编写一个脚本,循环访问库中的元素,并导出swf,仅导出为动作脚本导出的动画片段,并生成位于导出完成时位于剪贴板中的代码位:

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文件来运行它,把它放在闪存(IDE)的命令文件夹,它会在命令菜单弹出的界面。

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

有几件事情我不明白,虽然,我试图打破它:

我有一系列的大FLA文件 ,正在发布到SWC的 ,然后直接使用在闪光灯 项目。可能总共有1000+个以上的对象。随着数量的增长,最终 编译后的swf变得相当大,所以 我只想根据需要下载每个对象的 个别swf。

因此,有些资产需要稍后编码。 我想象一个SWC将包含导出动作 导出多个动画片段,并且可能有更多的fla文件具有不同类型的资产。

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

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

的问题是,我发现 出口每一个是1)复制和 其粘贴到一个新的FLA文件2)双击 点击“编辑”的唯一方式,迫使它 包括, 3)重置联系人(类) 名称,因为它已被擦除,4)发布 (即文件 - >发布)并将其命名为swf。

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

+0

感谢您的脚本想法,我会看看。回答你的问题。 1)通过getDefinition或仅通过获取构造(例如Object(mc).contructor)作为示例。 2)出于某种原因,当你点击右键时,即使在一个资产的导出操作被选中,并且一个类名被设置,它也不包括类信息。只有当你使用文件 - >发布它才会被包含。不知道为什么。 – Preston 2011-01-11 01:01:10