jsfl将人物序列帧导成swf文件

1、问价目录结构:1、2、3、4、5这5个文件夹中是人物的序列帧。SWF中存放生成的SWF和fla文件。

2、每个序列帧文件夹中包含序列帧和一个XML的文件。

<Action Name="6_剑刃风暴_1">
  <OffSet FileName="0000.png" OffSetX="-117" OffSetY="-170"/>
  <OffSet FileName="0001.png" OffSetX="-139" OffSetY="-126"/>
  <OffSet FileName="0002.png" OffSetX="-72" OffSetY="-139"/>
  <OffSet FileName="0003.png" OffSetX="-56" OffSetY="-160"/>
</Action>

 

3、程序代码:

//打开图片目录
var sourcePath = fl.browseForFolderURL("png图片目录"); 

var pos = sourcePath.lastIndexOf("/");
var pngFileName = sourcePath.substr(pos + 1);

var destPath = fl.browseForFolderURL("swf和fla文件目录"); 


fl.trace("png图片目录:" + sourcePath);
fl.trace("png直接目录: " + pngFileName);
fl.trace("swf文件目录: " + destPath);


//读取文件列表句柄
var folderList = FLfile.listFolder(sourcePath, "directories");

var doc1 = fl.createDocument();
doc1.frameRate = 30;	
doc1.width = 1000;
doc1.height = 1000;
doc1.backgroundColor = ‘#ffffff‘;





//处理每个文件
for(var j = 0;j < folderList.length; j ++) 
{
     var childFolder = folderList[j];
     fl.trace("文件夹: " + sourcePath + "/" + childFolder);
     
     //取的文件列表句柄
     var list = FLfile.listFolder(sourcePath + "/" + childFolder, "files");
     var doc = null;
     var xmlName = null;
     
     
	 
	
     if(list)
     { 
          //循环这个句柄 获得所有的子文件
          fl.trace("All png name:");
          for(var i = 0;i < list.length; i ++)
          {
               var fileName = list[i];
			   fl.trace(fileName);
               var suffix = fileName.toLowerCase().substr(fileName.length - 3);
               if("png" == suffix)
               {
                    if(doc == null)
                    {
                         //创建一个fla,默认timeline 
                         doc = fl.createDocument();
                         doc.frameRate = 30;
                         doc.width = 100;
                         doc.height = 100;
                         doc.backgroundColor = ‘#ffffff‘;
						
                         
                    }
                    //文件导入到flash/舞台/库
					fl.trace(sourcePath + "/" + childFolder + "/" + fileName);
                    doc.importFile(sourcePath + "/" + childFolder + "/" + fileName, true);
               }  
               if("xml" == suffix)
               {
                    xmlName = fileName;
               }
          } 
     }
     
     if(null == xmlName)
     {
          alert("没有指定的xml资源!");
     }
     else if(null != doc)
     {
		  var componentName = "FL_" + childFolder.substr(0, 1) + "_" + childFolder.substr(childFolder.length - 1);
		  
          //library只读属性,库面板
          var lib = doc.library;
          //在库里面加入一个movie clip 名字叫npc
          lib.addNewItem("movie clip", componentName);
          //编辑这个mc
          lib.editItem(componentName);
          
          
          
          
          //得到当前的timeline对象 当前时间轴可以是当前场景、正在编辑的当前元件或当前屏幕
          var tl = doc.getTimeline();
          //将图层设置为选定;同时将指定图层作为当前图层
          tl.setSelectedLayers(0);
          //只读;图层对象数组 命名
          tl.layers[0].name="bitmap";
          //计算多少个图片 在给定的帧编号处插入指定数目的帧。
          var len = lib.items.length-1;
          tl.insertFrames(len-1);
          //设置第一针 然后开始写入图片
          var frameId = 0;
          //lib.items 项目库中的全部item
          var xmlURL = sourcePath + "/" + childFolder + "/" + xmlName;
          var xml = XML(FLfile.read(xmlURL));
          fl.trace(xml);
		  var bitmapItemArr = new Array();
          for(var i = 0;i < lib.items.length; i ++)
          {
               var item = lib.items[i];
               if("bitmap" == item.itemType)
               {
                    
                    //一个布尔值,它指定是否允许对位图进行平滑处理
                    item.allowSmoothing = true;
                    //一个字符串,它确定应用于位图的压缩类型
                    item.compressionType = "photo";
                    //一个整数,用于指定位图的品质
                    item.quality = 80;
                    if(0 < frameId)
                    {
                         //convertToBlankKeyframes方法;将当前图层的帧转换为空白关键帧。
                         tl.convertToBlankKeyframes(frameId);
                    }
                    //addItemToDocument方法;将当前项目或指定的项目添加到舞台的指定位置
                    fl.trace(item.name);
                    var biasX = new Number(xml.OffSet[frameId].@OffSetX);
                    var biasY = new Number(xml.OffSet[frameId].@OffSetY);
                    fl.trace(biasX + " " + biasY);
                    lib.addItemToDocument({x:item.hPixels / 2 + biasX, y:item.vPixels / 2 + biasY}, item.name);
                    //向前推针
                    frameId ++;
					bitmapItemArr.push(item);
					
               }
          }
		  
		  //设置链接
          lib.selectItem(componentName);
          
          lib.setItemProperty("linkageImportForRS", false);
          lib.setItemProperty("linkageExportForRS", false);
          lib.setItemProperty("linkageExportForAS", true);
          
          lib.setItemProperty("linkageClassName", componentName);
          
		  
          doc1.library.newFolder(childFolder);
		  doc1.library.newFolder("image");		  
		  var lib1 = doc1.library;
		  
          var li = lib.items[lib.findItemIndex(componentName)];

          doc1.addItem({x:300, y:300}, li);
		  
		  for(var i = 0; i < bitmapItemArr.length; i ++)
		  {
			  lib1.moveToFolder("image", bitmapItemArr[i].name);
		  }
		  
          lib1.moveToFolder(childFolder, componentName);
		  lib1.moveToFolder(childFolder, "image");
          
          doc.close(false);
          
          
          
     }
     else
     {
          alert("没有指定的png图片!");
     }
}


//导出swf
doc1.exportSWF(destPath + "/"  + pngFileName + ".swf", true);
// 是否保存fla 文件
fl.saveDocument(doc1, destPath +  "/"  + pngFileName + ".fla");          
//关闭这个文件
doc1.close(false); 

 

jsfl将人物序列帧导成swf文件,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。