Flash JSAPI 入门

      flash转载 2004-8-12 15:49
翻译:tomcat

Flash JSAPI 入门(一)
翻译自前几个月macromedia发布的flash jsapi开发文档。和大家共享...


本文档要求熟悉javascript和Action Script语法并知道最基本的函数,参数和数据类型的编程。同时也要求了解对象和属性的概念。可以参考Netscape javascript文档。(http://developer.netscape.com/tech/javascript/index.html)

Macromedia Flash javascript API(JSAPI)简介
Action Script脚本是SWF文件在flash播放器里执行的语句。JSAPI是让你在flash开发环境,也就是打开flash程序时编写和执行的脚本。你可以写出命令和脚本行为,可以为工具栏添加工具。这些脚本能够帮助自动执行一些过程。
Flash JSAPI类似DreamWeaver和Fireworks的javascript API(基于Netscape javascript API)。Flash JSAPI是基于DOM(Document Object Model),它可以让flash文档使用JS 对象。FLASH JSAPI包括了所有JSAPI,并增加了Flash DOM。增加的对象和方法属性将在以下文档介绍。你可以使用任何JS的元素,但只有对flash文档有意义的元素才会有效果。

你可以使用flash MX 2004 或者你喜欢的文本编辑器来写FLASH JS文件。如果你有FLASH PROFESSIONAL这些文件就有了扩展名为JSFL的文件。如果你要使脚本在菜单的COMMANDS菜单下,把JSFL文件保存到如下类似目录:
C:\Documents and Settings\<user>\Local Settings\ Application Data\Macromedia\ Flash MX2004\<language>\Configuration\Commands

JSFL增加的工具会被保存在TOOLS文件夹:
C:\Documents and Settings\<user>\Local Settings\ Application Data\Macromedia\ Flash MX2004\<language>\Configuration\Tools

如果JSFL还有其他比如xml文件等,他们同样需要放置在相同的目录下。
你也可以选中历史面板中一个和多个命令行,把他们保存成JSFL文件。
通过COMMANDS菜单下运行脚本和EDIT目录下CUSTOMIZE TOOL PANEL增加工具。

你可以通过MMExecute()语句来把JSAPI命令嵌入AS文件中,该语句可以在mx2004的as字典中找到。可是,MMExecute()语句只是在flash程序中影响比如组件属性面板或者swf面板的相关元素。即使通过as调用JSAPI命令,它也不会影响在开发界面外的flash播放器。
JSAPI同时也包含了一些可以让你扩展使用js和c代码的方法。文章后面会有更多的介绍。
Flash js对象包括属性和方法。属性,都被定义为最基本的数据类型,如布尔变量,整型,数组,浮点或者相关的数据形式,比如颜色,对象,点,矩形和字符串,用来描述对象。方法是对象的执行功能。为了使用对象的方法和属性,我们使用点符号。同样,大部分对象都有getPorperties和setPorperty,分别用来取得指定属性和设置指定属性。大部分方法有传递参数,用于方法的不同应用。

FLASH DOM
Flash JSAPI的DOM包涵了一组顶级函数和顶级flash对象。Flash对象一直可以被代码使用只要flash开发环境是打开的。当要指定该对象时,使用flash或者fl。举个例子,为了关闭所有的打开的文件,你可以使用如下语句:
Flash.closeAll();
Fl.closeAll();
Flash对象包括了以下子对象:
ComponentsPanel 使用fl.componentsPanel来指定componentsPanel对象,该对象指的是flash开发环境的组件对象面板。
Document 使用fl.documents得到一个已经打开的flash文档数组。使用fl.documents[index]来得到指定的文档,使用fl.getDocumentDOM()来得到目前激活的文档。
DrawingLayer 使用fl.drawingLayer来得到drawingLayer对象
Effect 使用fl.effects来得到flash打开后已经注册的效果描述的数组
Math 使用fl.Math来取得Math对象
OutputPanel 使用fl.outputPanel来得到outputPanel对象。该对象对应flash开发环境的输出面板。
Tools fl.tools是一个包含了toolObjs属性的对象。ToolObjs属性是一个toolObjs对象数组。每一个toolObj对象都代表了flash工具栏的一个工具。
ToolObj 用fl.tools.toolObjs取得所有工具对象的数组。使用fl.tools.activeTool能够取得目前激活的工具对象。
XMLUI 使用fl.xmlui来取得一个XML用户界面对象。XMLUI对象提供了取得和设置XMLUI对话框的能力。

Document对象
一个顶级flash对象的属性就是documents属性。该documents属性是一个包括了目前在flash里面打开的文档的数组。每一个Document对象代表了fla文件包括的大部分元素。所以
DOM里面很大一部分是Document对象的子对象和属性。
指定第一个打开的flash文档,举个例子,使用fl.documents[0]。第一个文档指的是在flash开发环境下打开的第一个flash文档。当第一个flash文档被关闭后,其余的打开文档数组下标均递减。
寻找一个指定的文档的下标,使用fl.findDocumentIndex{nameOfDocument}
指定目前的打开的flash文档,使用fl.getDocumentDOM().
寻找特定的文档,在documents数组中检查每一个name属性。
在前面表里没有列出的所有DOM对象都是通过Document对象取得。比如,得到一个文档的library,你使用Document对象的library属性。它将得到library对象,fl.getDocumentDOM().library
为了得到library里面元素的数组,使用library的items属性,得到的数组里每一个元素都是一个Item对象。Fl.getDocumentDOM().library.items
为了得到一个特定的library里item,使用items数组的成员元素。Fl.getDocumentDOM().library.items[0]
换句话说,Library对象是Document对象的子对象,而Item对象是Library对象的子对象。

指定动作的目标
除非特别指明,方法都是对所选区和选中的对象执行的。举个例子,因为没有特别的对象指定,以下的脚本将是目前选取的区域尺寸放大一倍。Fl.getDocumentDOM().scaleSelection(2,2);
在一些情况下,你必须要对在flash文档选取特定元素执行动作。为了做到这一点,使用Document.selection得到的属性数组。该数组里面第一个元素表示了目前的选择元素,如下:
var accDescription = fl.getDocumentDOM().selection[0].description;
一下的脚本将把所选区的第一个元素尺寸放大一倍。
Var element = fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0];
If (element){element.width=element.width*2;
Element.height = element.height*2}
你同样可以做类似的,浏览一遍场景中所有元素,并放大特定的数量的宽和高,如下:
var elementArray= fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements;
for (var I=0; I< elementArray.length;I++){
var offset=10;
elementArray[i].width +=offset;
elementArray[i].height +=offset;}

总结一下DOM结构
以下是FLASH DOM简要结构,前面的数字代表了对象所在层。举个例子数字为3的对象是数字为2的对象的子对象,同样,它又是低于数字为1的对象。
在一些情况下,一些对象通过上级对象的指定属性得到。举个例子,Document.timelines属性包括了timeline的对象数组。可以参考如下的简介。最后要说的是,一些对象是其他对象的次级对象,而不是其他对象的子对象。一个是其他对象的次对象,有它自己的比上级对象增加的属性和方法。次级对象和上级对象在继承的时候是位于同一层的。举个例子,Item是BitmapItem的上级对象。以下简介:
01 Top-level functions
01 flash object
02 componentsPanel object
02 Document object (fl.documents array)
03 Matrix object
03 Fill object
03 Stroke object
03 library object
04 Item object (library.items array)10Flash javascript Dictionary
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)
06 EmbeddedVideoInstance object (subclass of Instance object)
06 LinkedVideoInstance object (subclass of Instance object)
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 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
03 ScreenOutline object
04 Screen object (screenOutline.screens array)
05 Parameter object (screen.parameters array)
02 drawingLayer object
03 Path object
04 Contour object
02 Effect object (fl.effects array)
02 Math object
02 outputPanel object
02 Tools object (fl.tools array)
03 ToolObj object (tools.toolObjs array)
02 XMLUI object

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}
}