利用JSFL制作swf素材包

想利用ria来生成swf,可以当看过swf文件规范之后感觉这样做似乎过于复杂了。以前衰人给过一个使用Flash CS3 IDE的扩展来制作的方式,没有怎么深入去看。周末仔细研究了一番,感觉走了弯路了。JSFL已经可以通过很简单的代码来处理所有素材包的制作了,何必非要去做个另类的生成工具。

JSFL使用起来很简单,而且调试很方便。IDE里面的历史面板可以把你每一步操作使用的JSFL源码都告诉你。第一次使用你可能需要了解他的这个DOM结构,语法是js语法,即使你没有任何js基础,但是有AS基础就够用了。

1、当前打开的文档用fl.getDocument()取得,他是一个Document对象。

2、fl.getDocument().library 取得当前文档库的引用,做素材的话这个是最常用到的了。库面板上可以进行的操作,你都可以用API来做,看一下帮助文档就了解了,并不复杂。

3、fl.getDocumentDOM().getTimeline() 来访问当前文档的时间轴。此方法返回当前正在编辑的场景或元件的时间轴。也就是你当前正在操作哪个时间轴,显示的就是哪个时间轴。

4、时间轴上又分了层layer,每一个层又有不同的帧frame。程序可以取得任何的时间轴上面的层和帧的内容。

5、有的时候操作某个东西需要把他变成选择状态。场景中正在编辑的东西的选取可以通过坐标来操作,相当于你在某个坐标点了一下,那么这一点下最上层的物体就被选中了。

6、JSFL一般存储在C:\Documents and Settings\Samsung\Local Settings\Application Data\Adobe\Flash CS3\zh_cn\Configuration 里面(这个会不一样,到你的用户名下找一下,这里我的用户名是Samsung),一般你放到这个目录下的command目录里面,那么就可以在你的Flash CS3 IDE的菜单-》命令中找到。

如果想多了解多一点他的用法,可以参考衰人的帖子。http://bbs.actionscript3.cn/viewthread.php?tid=19760&highlight=jsfl

说了一堆,简单看一个例子就明白了。

 

开始制作之前我们先大致确定一下我们的需求:

1、我们需要把每一位图都变成一个MC,同时把这个MC作为一个导出类来用

2、每一个位图都有一个唯一的导出类名。

3、所有的位图变成MC之后都是左上角作为原点。

4、处理完的位图和MC都在库里面分目录存放,资源的种类作为目录。

5、位图的文件名中记录了种类、名称和导出类名。(本例中的位图命名规则为:种类_名称_导出类名.png)

最后使用的JSFL代码如下。

代码
fl.getDocumentDOM().selectAll(); // 选中场景中所有的位图
if (fl.getDocumentDOM().selection.length > 0 )
{
    fl.getDocumentDOM().deleteSelection();
// 删除所有位图
}
var lib
= fl.getDocumentDOM().library; // 取得库
var libLength = lib.items.length; // 库元素的长度
var bitmapArr = new  Array(); // 库里面没有处理的位图
for (var i = 0 ;i < libLength;i ++ )
{
    
// 没有在目录中的位图则表示没有处理
     if ((lib.items[i].itemType == " bitmap " ) && ((lib.items[i].name).indexOf( " / " ) ==- 1 ))
    {
        bitmapArr.push(lib.items[i].name);
        trace(
" lib.items[i].name " )
    }
}
if (bitmapArr.length > 0 )
{
    
// 创建目录
     for (var i = 0 ;i < bitmapArr.length;i ++ )
    {
        var name
= bitmapArr[i]; // 位图的完整名称
        var nameArr = bitmapArr[i].split( " _ " ); // 位图名称的拆分数组
        var folder = nameArr[ 0 ]; // 目录名称
        var iconName = nameArr[ 1 ]; // 图标名称
        var code = nameArr[ 2 ].split( " . " )[ 0 ]; // 图标编码
        lib.newFolder(folder);
        lib.selectItem(name);
// 选中位图
        lib.addItemToDocument({x: 0 , y: 0 }); // 添加到场景
        fl.getDocumentDOM().selectAll();
        var mcName
= iconName + " _ " + code;
        
// 转换为mc
        fl.getDocumentDOM().convertToSymbol( " movie clip " ,mcName, " top left " ) ;
        
if  (lib.getItemProperty( ' linkageImportForRS ' ==   true ) {
        lib.setItemProperty(
' linkageImportForRS ' false );
        }
        lib.setItemProperty(
' linkageExportForAS ' true );
        lib.setItemProperty(
' linkageExportForRS ' false );
        lib.setItemProperty(
' linkageExportInFirstFrame ' true );
        lib.setItemProperty(
' linkageClassName ' , code);
        lib.setItemProperty(
' scalingGrid ' ,   false );
        fl.getDocumentDOM().selectAll();
// 选中场景中所有的位图
        fl.getDocumentDOM().deleteSelection(); // 删除所有位图
        var bitmapFolder = folder + " /图素 " ;
        var mcFolder
= folder + " /导出类 "
        lib.newFolder(bitmapFolder);
        lib.newFolder(mcFolder);
        lib.moveToFolder(mcFolder, mcName);  
        lib.moveToFolder(bitmapFolder, name);      
    }
}
else
{
    alert(
" 没有需要处理的位图! " );
}

 


 

你可能感兴趣的:(JSF)