jsfl将特效序列帧导成swf文件

要求:

1、文件的目录结构:test中保存序列帧图片,格式png,swf中保存导出的swf和fla文件;

2、test文件夹:包括序列帧图片和一个xml文件,xml文件中的内容是png文件的偏移量。

jsfl将特效序列帧导成swf文件_第1张图片

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 list = FLfile.listFolder(sourcePath, "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];
		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(fileName);
            doc.importFile(sourcePath + "/" + fileName, true);
		}  
		if("xml" == suffix)
		{
			xmlName = fileName;
		}
	} 
}

if(null == xmlName)
{
	alert("没有指定的xml资源!");
}
else if(null != doc)
{
	//library只读属性,库面板
    var lib = doc.library;
    //在库里面加入一个movie clip
    lib.addNewItem("movie clip","effect");
    //编辑这个mc
    lib.editItem("effect");
	

	
	
    //得到当前的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 + "/" + xmlName;
	var xml = XML(FLfile.read(xmlURL));
	fl.trace(xml);
    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 ++;
		}
	}
	

   
    
	//设置链接
	lib.selectItem("effect");
	
	lib.setItemProperty("linkageImportForRS", false);
	lib.setItemProperty("linkageExportForRS", false);
	lib.setItemProperty("linkageExportForAS", true);
	
	lib.setItemProperty("linkageClassName", "effect");
	
    //导出swf	
	
	var li = lib.items[lib.findItemIndex("effect")];
	
	var doc1 = fl.createDocument();
	doc1.frameRate = 30;
	doc1.width = 1000;
	doc1.height = 1000;
	doc1.backgroundColor = '#ffffff';
	
    doc1.addItem({x:300, y:300}, li);
    //导出swf

    doc1.exportSWF(destPath + "/"  + pngFileName + ".swf", true);
     // 是否保存fla 文件
	fl.saveDocument(doc1,destPath +  "/"  + pngFileName + ".fla");
    //关闭这个文件
	doc.close(false); 
}
else
{
	alert("没有指定的png图片!");
}

 

4、swf文件:

 jsfl将特效序列帧导成swf文件_第2张图片

5、fla文件:

jsfl将特效序列帧导成swf文件_第3张图片

 

 

你可能感兴趣的:(JSF)