如何使用 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) 将库中的对象添加到舞台?

如何将对象从 windowSWF 传递到 JSFL?

jsfl中的exportSVG在adobe animate中作为命令运行不起作用

如何将EXCEL里的大量数据导入并转化成MATLAB中的矩阵

在 testMovie 命令之后,如何让 JSFL 将跟踪输出保存到文件中?

如何在 JSFL 文件中包含一些 js 文件?