如何使用 JSFL 将不同文件夹中的大量位图导入到库中,并将文件夹结构保存在 fla 文件中
Posted
技术标签:
【中文标题】如何使用 JSFL 将不同文件夹中的大量位图导入到库中,并将文件夹结构保存在 fla 文件中【英文标题】:How to use JSFL to import lot of bitmaps from different folder to library and keep the folder structure in fla file 【发布时间】:2012-08-25 08:38:18 【问题描述】:我需要将不同文件夹中的大量位图文件导入到 fla 文件库中,并将文件夹结构保留在 fla 文件中。
例如,我有这样的文件结构:
mainFolder -> folder1 -> png1.png mainFolder -> folder1 -> folder11 -> png2.png mainFolder -> 文件夹2 -> png3.png mainFolder -> 文件夹 2 -> png4.png
我需要在库中的 fla 文件中具有相同的结构:
文件夹 1 -> png1.png 文件夹 1 -> 文件夹 11 -> png2.png 文件夹 2 -> png3.png 文件夹 2 -> png4.png
现在我已经创建了这个代码:
var dom = fl.getDocumentDOM();
var URI = fl.browseForFileURL("select", "Import File");
var success = dom.importFile(URI);
if(success)
fl.trace(flash.documents[0].name);
var indexOfFileName = URI.lastIndexOf("/");
var folderStructure = URI.slice(URI.indexOf(flash.documents[0].name),indexOfFileName);
dom.library.newFolder(folderStructure);
var fileName = URI.slice(indexOfFileName + 1,URI.length);
dom.library.moveToFolder(folderStructure, fileName, true);
// 在我的例子中 mainFolder 是 fla 文件的名称(带有 .fla 扩展名)
这段代码创建了我需要的文件夹结构,但我还不知道如何一次加载多个文件,只需指向主文件夹,例如 fl.browseForFolderURL("Select a folder.")
【问题讨论】:
澄清一下,您正试图以编程方式将资产导入您的工作 .fla,同时镜像相同的目录结构,以实现干净的 GUI 工作流程?如果是这样,我可以鼓励相反吗?将 FLA 文件的大小保持在最低限度,以便导出的 swf 尽可能小。然后,从外部动态加载您的资产。应该允许更具响应性、轻量级的应用程序。至少这是我的经验;我不确定你的目标是什么。 我有旧的 fla 文件结构。我需要将所有图形从它们导出到桌面优化外部工具中的图形,然后以相同的结构将它们加载回 fla 文件。我已经创建了用于导出图形的 jsfl 文件,但我不知道如何自动导入优化 png 的背面。顺便说一句,如果有人需要可以从库中导出所有图形/位图/声音的 jsfl 文件,请告诉我。仍然请帮助我自动加载文件。 【参考方案1】:我终于成功了。如果有人需要这样的东西,这是我的解决方案:
fl.outputPanel.clear()
var folderURI = fl.browseForFolderURL("Select a folder.");
fileList = new Array()
function listFile(paths)
var files=[]
var folds=[]
var files=FLfile.listFolder(paths,"files");
for(i=0;i<files.length;i++)
if(paths.lastIndexOf("/") != paths.length -1 )
paths+="/";
fileList.push(paths + files[i]);
var folds = FLfile.listFolder(paths , "directories");
for(var j=0;j<folds.length;j++)
var subPath = paths + folds[j] + "/"
listFile(subPath);
//make sure that this stops at a reasonable point.
if (fileList.length > 1000)
return;
function importFile(URI)
var success = dom.importFile(URI);
if(success)
var indexOfFileName = URI.lastIndexOf("/");
var documentName = flash.documents[0].name;
var folderStructure = URI.slice(URI.indexOf(documentName) + documentName.length + 1,indexOfFileName);
if(folderStructure)
dom.library.newFolder(folderStructure);
var fileName = URI.slice(indexOfFileName + 1,URI.length);
dom.library.moveToFolder(folderStructure, fileName, true);
return;
listFile(folderURI);
for(i=0;i<fileList.length;i++)
fl.trace("fileList["+i+"]="+ fileList[i]);
importFile(fileList[i])
带有照片的主文件夹的名称必须与 fla 的名称相同 例如文件夹必须有名称 test.fla
【讨论】:
干得好。请注意,第二段代码缺少设置 dom 变量的行,所以我添加了 var dom = fl.getDocumentDOM();以上是关于如何使用 JSFL 将不同文件夹中的大量位图导入到库中,并将文件夹结构保存在 fla 文件中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flash JavaScript 文件 (.jsfl) 将库中的对象添加到舞台?
jsfl中的exportSVG在adobe animate中作为命令运行不起作用
如何将EXCEL里的大量数据导入并转化成MATLAB中的矩阵