JSFL使用手册

JSFL是一个很强大的东西,而且研究的越深越发现其功能的强大。

下面我就把自己总结的一些东西拿出来和大家分享一下。

1、 JSFL存放路径

    1)JSFL文件可以单独存放于磁盘中,只要选择其 打开方式 为Adobe Falsh即可.

    2)可以把JSFL文件放在

        *:\Documents and Settings\*username*\Local Settings\Application Data\Adobe\Flash CS4\zh_CN\Configuration\Commands

     然后进入任何一个Flash文件,选择命令菜单就可以看见你新建的JSFL了。

 

     对于第一种存放方法适用于用其他工具(如Java)写一些批量操作的脚本,而第二种方式更方便与对特定Flash操作的脚本化(如帮美术完成一些复杂枯燥的操作等。)

2、 JSFL中函数的使用

     在脚本中可以加入函数的调用 如:

 

     function print(_message)

     {

          fl.trace(_message);

          //return something  if you want you can return somethings

     }

 

     注意JSFL中的函数和As代码中的函数有几点不同

 

     1)JSFL中函数(包括变量)声明是不用且不能指定类型的,如 var i:int 等

     2)如果函数需要retun结果的话,直接return即可 不用在function前面声明return的类型

3、 写文件操作

     JSFL强大就强大在于它可以写出文件,这样就很容易和其他程序共享信息。

     写文件的方法非常简单

     FLfile.write( filePath , message , "append");

     filePaht填入文件的路径 如 file:///test.xml

     message为需要写入的内容

     append 参数表示是添加在现有文件的结尾,而不是覆盖写入

4、 舞台相关类

     1)Document : Document是指的用户打开的一个FLA文件,一个FLA文件就是一个Document

     2)Timeline:Timeline就是用于编辑Flash的时间轴

     3)Layer:Layer就是时间轴上的层

     4)Frame:Frame就是层里面的帧

     5)Element:Element是帧里面的元素,也就是能在舞台上看见的元素

     舞台上的元素是存在继承关系的 SymbolInstance->Instance->Element

5、 Library相关类

     1)Library就是对应的Flash的库

     2)Item就是对应着库中的原件。

6、 JSFL导出xml

     1)说明。要想在flash中导出xml文件,先要在flash的输出面板中将xml文件输出,然后通过JSFL将其导出

     2)代码如下:

     fl.outputPanel.clear();//清除面板中的输出
     fl.trace(“<xml version=\”1.0\” encoding=\”utf-8\”?>”);//输出
     fl.trace(“<list>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“<item name=’yoewan’ property=’yoewan’/>”);
     fl.trace(“</list>”);

    //获取保存文件路径
   var out = fl.getDocumentDOM().xmlPanel(fl.configURI + ”Commands/save.xml”);
   if(out.dismiss == ”accept”){         
   fl.outputPanel.save(out.url);

   }

   在JSFL命令文件夹中保存创建一个save.xml,内部写上
   <dialog buttons=”accept, cancel”  title=”保存输出面板信息” >
         <hbox>
                  <label value=”URL:” />
                   <textbox id = ”url” size=”30″ multiline=”false”/>
                   <buttons=”accept, cancel”/>
         <hbox>
     </dialog>

7、 JSFL获取时间轴

    fl.getDocumentDOM().getTimeline()

 

8、 JSFL获取层数据

    fl.getDocumentDOM().getTimeline().layers

 

9、 JSFL获取帧数据

    //要向获取帧数据,先要获取层
    var lay=fl.getDocumentDOM().getTimeline().layers
    //jsfl中的层数据是一个数组,可能有多层,所以要通过下标获取层,然后在获取层上的帧数据,每一层都有n帧
    var frame= lay [0].frames
    var frame1= lay [1].frames

 

10、 JSFL获取元件变形点坐标

    //获取舞台上的一个元件
    var el = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0];
    //获取变形点坐标
    fl.trace(el.transformX);//输出变形点坐标
    fl.trace(el.transformY);

11、 JSFL获取元件缩放值

    //获取舞台上的一个元件
    var el = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0];
    //获取元件的缩放值
    fl.trace(el.scaleX );//输出缩放值
    fl.trace(el.scaleY );

 

12、 JSFL元件类型判断

     1)说明。舞台上所有的元件都element类型的,先获取一个element

   var el = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0];
   判断Element类型:
   el.elementType获取Element类型
   Element有三种类型:”shape”、”text”、”instance” 或 ”shapeObj” 。”shapeObj” 是通过可扩展工具创建的 。

   1、shape,在舞台上的几何形状都是该类型
   2、Text,文本类型,textField都是该类型
   3、Instance,元件、图片、声音等

   如果元件是Instance类型的,可以获取Instance对象的相关方法,如果是其它类型,也可以获取其它类型对象的特定属性,不需要转换,可以直接使用该属性,当然,类型必须一致
   如:el.instanceType 将输出instance对象的类型,可能值为 symbol、bitmap、embedded video、linked video、video 和 compiled clip。

     2)代码如下:

   //获取舞台上第一层第一帧上的全部元件
   var els = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;
   //遍历元件
   for(var i=0;i<els.length;i++){
   var el=els[i];
   typeJudge(el);
   }

   //类型判断
   function typeJudge(el){
   switch(el.elementType){
   case 'instance':
   //instace对象的类型判断
      instanceOpera(el);
      break;
   case 'text':
      fl.trace('text');
      break;
   case 'shape':
      fl.trace('shape');
      break;
   }
 }

   //instance对象的类型判断
   function instanceOpera(value){
   switch(value.instanceType){
   case 'symbol':
   //类型是影片剪辑,可以继续往下判断类型
      symbolOpera(value);
      break;
   case 'bitmap':
      fl.trace('bitmap');
      break;
   case 'compiled clip':
      fl.trace('compiled clip');
      break;
   }
 }

   //影片剪辑的类型判断
   function symbolOpera(value){
   switch(value.symbolType){
   case 'button':
      //类型是按钮
      fl.trace('button');
      break;
      case 'movie clip':
      //类型是movieClip
      fl.trace('movie clip');
      break;
   case 'graphic':
   //类型是图形
      fl.trace('graphic');
      break;
   }
}

 

13、 JSFL导出图片

   var path = "file:///E|/WorkSpace/Flash/";//导出图片的地址

   var lib = fl.getDocumentDOM().library;//获取flash中的库

   var items = lib.items;//获取库项目数组

   //循环比例库项目

   for(var i=0;i&lt;items.length;i++)

   {

   //判断类型,如果是图片就导出

   if(items[i].itemType == "bitmap"){
   var itemName = items[i].name;//获取库项目全部名称
   var eName=itemName.substring(itemName.lastIndexOf("/") + 1, itemName.length);//获取本身的名称
   items[i].exportToFile(folderPath + "/resourceImg/" + eName);//导出图片,如果是bitmap类型,有exportToFile方法导出
   }
}
   fl.getDocumentDOM().close();//关闭flash

   要想导出,先创建一个jsfl文件,保存好,对文件命名,假设是extendPng

   打开要导出图片的flash文件,然后选择 命令->extendPng 就可以将图片导出到你的文件夹中

   注意:文件夹要事先创建好,该代码没有创建文件夹的功能

 

14、 JSFL获取库元件

     1)说明。要想通过舞台上的元件获取库元件,这个元件必须是instance类型的,只有是instance类型,才可以通过它的属性获取到库中元件

     2)代码如下:

    //获取舞台上的元件
    var els = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;

    //遍历元件
    for(var i=0;i<els.length;i++){
    var el=els[i];
    //判断元件类型
    if(el.elementType=='instance'){
    //获取库元件,要想对库元件操作,你可以写别的代码操作
    var item=el.libraryItem;
    }
}

 

15、 JSFL批量修改舞台元件名称

     1)说明。要想修改舞台元件名的名称,先获取元件,获取到元件后,就可以对它的属性进行操作,设置名称或其它修改。

//获取到元件后,可以通过item.name='yoewan.com'来修改元件的名称
var item=fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0] ;
item.name="yoewan.com";

     2)代码如下:

     //获取库中的全部元件
     //这个获取的是flash中第一层上的所遇帧的数据
     var items = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;
     //循环修改名称
     for(var i=0;i<items .length;i++){
     var item=items[i];
     item.name='yoewan.com'+i.toString();
     }
 
如果你想自定义名称的前缀,可以通过xml的方式扩展,代码如下
 
     var items = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;
 
     var uxi = fl.getDocumentDOM().xmlPanel(fl.configURI + "Commands/rename.xml");//获取xml文件
 
     var name='yoewan.com';
 
     if(uxi.dismiss=='accept'){
 
     name=uxi.prefixName;
 
     }
 
     for(var i=0;i<items .length;i++){
 
     var item=items [i];
 
     item.name=name+i.toString();
 
     }
 
xml代码: xml文件的名称rename.xml

     <?xml version=”1.0″ encoding=”utf-8″?>
     <dialog buttons=”accept,cancel” title=”Bat Rename Tool” >
     <label value=”please into imgname”/>
     <textbox id=”prefixName”/>
     </dialog>

在使用时候需要将文件先保存到flash命令文件夹
win7的地址是:C:\Users\Administrator\AppData\Local\Adobe\Flash CS5.5\zh_CN\Configuration\Commands文件下面

 

16、 JSFL设置舞台元件属性

     1)说明。

     要想设置元件的属性,先要获取一个元件,之后在设置元件的属性。

     元件的属性有几个层级,第一层就是Element类型带的属性,所有舞台上的元件都有这些属性,这些是最基础的属性。

     Element元件不同类型,有不同属性,如text、shape、instance类型就有各自不同的属性。

     shape有shape.isGroup只读;如果为 true,该形状是一个组合。

     Text有text.length 只读;一个整数,它表示 Text 对象中的字符数。

     Instance有instance.instanceType 只读;一个字符串,它表示实例的类型 。

     元件的属性和方法要跟元件的类型结合起来使用,可以通过判断元件的类型来获取元件的扩展属性和方法

     2)代码如下:

     //获取舞台上的元件

     var els = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;

     //遍历全部元件

     for(var i=0;i&lt;els.length;i++){

     var el=els[i];//获取一个元件

     //设置元件的属性,这些是基础属性,可以通过判断元件的类型去设置或获取一些扩展属性

     el.x=100;

     el.y=100;

     el.scaleX=0.5;

     el.scaleY=0.5;

     if(el.elementType=='text'){

     fl.trace(el.length);// 只读;一个整数,它表示 Text 对象中的字符数。

    }

     if(el.elementType=='shape'){

     fl.trace(el.isGroup);//如果为 true,该形状是一个组合

    }

     if(el.elementType=='instance'){

     fl.trace(el.instanceType);//只读;一个字符串,它表示实例的类型 。

    }

}

 

17、 JSFL中xml扩展

     如果你想自定义名称的前缀,可以通过xml的方式扩展,代码如下:

     var els = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;

     var uxi = fl.getDocumentDOM().xmlPanel(fl.configURI + "Commands/rename.xml");//获取

     xml文件

     var name='yoewan.com';

     if(uxi.dismiss=='accept'){

     name=uxi.prefixName;

   }

     for(var i=0;i&lt;els.length;i++){

     var el=els[i];

     el.name=name+i.toString();

  }

     Xml代码

     Xml文件的名称是rename.xml

     <?xml version=”1.0″ encoding=”utf-8″?>

     <dialog buttons=”accept,cancel” title=”Bat Rename Tool” >

     <label value=”please into imgname”/>

     <textbox id=”prefixName”/>

     </dialog>

将xml文件保存到flash的jsfl存储路径下面

 

18、 JSFL结构摘要

 

以下列表以大纲形式显示了 DOM 结构。每行开头的数字表示对象级别。例如,以“03”开头的对象是上一级“02”对象的子级,而后者又是上一级“01”对象的子级。

 

有些情况下,某对象可以通过指定其父对象的属性提供。例如,document.timelines 属性包含由 Timeline 对象组成的数组。下面的大纲说明了这些属性。

 

有些对象是其他对象的子类,而不是其他对象的子对象。除了父对象(超类)的方法和属性之外,作为其他对象子类的对象还有自己的方法和/或属性。子类与其超类在层次结构中共享同一级别。例如,Item 对象是 BitmapItem 对象的超类。下面的大纲阐释了这些关系:

01 Top-Level Functions and Methods

01 FLfile object

01 flash object (fl)

02 compilerErrors object

02 componentsPanel object

02 Document object (fl.documents array)

03 Filter object

03 Matrix object

03 Fill object

03 Stroke object

03 library object

04 Item object (library.items array)

04 BitmapItem object(subclass of Item object)

04 folderItem object (subclass of Item object)

04 fontItem object (subclass of Item object)

04 SoundItem object (subclass of Item object)

04 SymbolItem object (subclass of Item object)

04 VideoItem object (subclass of Item object)

03 Timeline object (document.timelines array)

04 Layer object (timeline.layers array)

05 Frame object (layer.frames array)

06 Element object (frame.elements array)

07 Matrix object (element.matrix)

06 Instance object (abstract class, subclass of Element object)

06 BitmapInstance object (subclass of Instance object)

06 CompiledClipInstance object (subclass of Instance object)

06 ComponentInstance object (subclass of SymbolInstance object)

07 Parameter object (componentInstance.parameters array)

06 SymbolInstance object (subclass of Instance object)

06 Text object (subclass of Element object)

07 TextRun object (text.textRuns array)

08 TextAttrs object (textRun.textAttrs array)

06 Shape object (subclass of Element object)

07 Oval object

07 Rectangle object

07 Contour object (shape.contours array)

08 HalfEdge object

09 Vertex object

09 Edge object

07 Edge object (shape.edges array)

08 HalfEdge object

09 Vertex object

09 Edge object

07 Vertex object(shape.vertices array)

08 HalfEdge object

09 Vertex object

09 Edge object

05 Parameter object (screen.parameters array)

02 drawingLayer object

03 Path object

04 Contour object

02 Math object

02 outputPanel object

02 presetPanel object

03 presetItem object(presetPanel.items array)

02 swfPanel object

02 Tools object (fl.tools array)

03 ToolObj object (tools.toolObjs array)

02 XMLUI object

 

 

posted @ 2013-01-11 14:29  【Winco】  阅读(7636)  评论(0编辑  收藏  举报