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