http://blog.csdn.net/aosnowasp/article/details/8863601
Flash 有很多内置面板,调色面板、对齐面板、元件库面板等等。
有时为了工作方便,我们需要自己编写一些脚本加快处理一些重复性较大的工序,这里所说的“脚本”就是 JSFL。
JSFL 全称 Flash JavaScript,它类似于 Microsoft Word 中的“宏”(虽然我不太懂那东西),帮助用户在创作环境中执行重复性任务、或者生成一些特效什么的,但这并不是我们这次所说的重点。
我们今天制作的Flash面板正是调用了JSFL来处理一项重复性较大的任务:快速替换元件库中所有元件中的特定文本。
首先我们来看看一段 JSFL:
var lib = fl.getDocumentDOM().library; for( var i in lib ) { for( var j in lib[ i ]) { //遍历所有库元件 if( lib[ i ][ j ].itemType == "graphic" || lib[ i ][ j ].itemType == "movie clip" ) { //判断,只有图形元件和影片元件里含有文本 for( var k in lib[ i ][ j ].timeline.layers ) { //遍历图层 for( var n in lib[ i ][ j ].timeline.layers[ k ].frames ) { //遍历所有帧 for( var m in lib[ i ][ j ].timeline.layers[ k ].frames[ n ].elements ) { //遍历所有帧里的可视元素 if( lib[ i ][ j ].timeline.layers[ k ].frames[ n ].elements[ m ] == "[object Text]" ) { //只有文本才执行下面的操作 if( lib[ i ][ j ].timeline.layers[ k ].frames[ n ].elements[ m ].getTextString() == "愚蠢的熊猫" ) { //获取你需要操作的字符 lib[ i ][ j ].timeline.layers[ k ].frames[ n ].elements[ m ].setTextString( "聪明的兔子" ); //替换字符 } } } } } } } }
这段代码的基本意思就是通过用JSFL把元件库中所有的文本取出来,然后对其内容做判断,进而替换新的内容
(只对元件库中的元件有效)。
制作 Flash 扩展组件的流程:
1. 现在我们打开Flash,在场景中加入两个输入型的文本框和一个按钮,再加入一些说明文字
2. 如上图所示,上面的文本框(实例名:ori_txt)我们可以输入查找的字符,
下面的文本框(实例名:new_txt)我们可以输入要替换成的字符,
最下面的按钮(实例名:btn)是用来执行JSFL的。
3. 接下来我们在AS层加入代码。首先为按钮编写侦听点击事件和执行函数:
btn.addEventListener( MouseEvent.CLICK, runScript ); function runScript( e:MouseEvent ) { var otxt:String = ori_txt.text; //点击按钮后读入文本框的字符 var ntxt:String = new_txt.text; //同上 var jsfl:String; MMExecute( jsfl ); }
大家可以留意到 MMExecute(); 这东西,它就是用来执行JSFL脚本的。
而我们预留了一个叫“JSFL”的字符型变量,这将被用来装载熊猫所写的JSFL脚本。
4. 特别需要留意的是我们的JSFL到了ActionScript必须变成一个字符串,所以我们得对准备好的JSFL做以下事情:
- 把特殊字符用转义字符处理好;
- 双引号变单引号;
- 把所有代码变成一行;
于是我们得到没有换行的代码:
var lib = fl.getDocumentDOM().library;for(var i in lib){for(var j in lib[i]){if(lib[i][j].itemType=='graphic'||lib[i][j].itemType=='movie clip'){for(var k in lib[i][j].timeline.layers){for(var n in lib[i][j].timeline.layers[k].frames){for(var m in lib[i][j].timeline.layers[k].frames[n].elements){if(lib[i][j].timeline.layers[k].frames[n].elements[m] == '[object Text]'){if(lib[i][j].timeline.layers[k].frames[n].elements[m].getTextString()=='愚蠢的熊猫'){lib[i][j].timeline.layers[k].frames[n].elements[m].setTextString('聪明的兔子');}}}}}}}}
5. 这个时候基本上把上面的代码代入JSFL变量就好了,但是那只能把“愚蠢的熊猫”变成“聪明的兔子”,
我们的文本框干嘛去了……
所以我们得把代码断开,断在“愚蠢的熊猫”和“聪明的兔子”处,为了好看,我们用这么几个字符型变量装载着:
var str1:String = "fl.outputPanel.clear();fl.outputPanel.trace('Start replacing text...');var lib = fl.getDocumentDOM().library;" var str2:String = "for(var i in lib){for(var j in lib[i]){if (lib[i][j].itemType=='graphic'||lib[i][j].itemType=='movie clip'||lib[i][j].itemType=='button'){for(var k in lib[i][j].timeline.layers){for(var n in lib[i][j].timeline.layers[k].frames){for(var m in lib[i][j].timeline.layers[k].frames[n].elements){if(lib[i][j].timeline.layers[k].frames[n].elements[m]=='[object Text]'){if(lib[i][j].timeline.layers[k].frames[n].elements[m].getTextString()=='"; var str3:String = "'){lib[i][j].timeline.layers[k].frames[n].elements[m].setTextString('"; var str4:String = "');fl.outputPanel.trace('---');}}}}}}}}"; var str5:String = "fl.outputPanel.trace('All text replaced.');";
上面我加入了 fl.outputPanel.clear() 和 fl.outputPanel.trace(),它们会在输出面板清除和显示文本,用来提醒用户脚本的执行情况。
6. 通过第5步把代码断开以后,我们就在第6步把代码重新组合起来,这时可以把从文本框取得的变量包括进来了:
var jsfl:String = str1 + str2 + otxt + str3 + ntxt + str4 + str5; MMExecute( jsfl );
7. 至此Flash部分就完成了,我们按照FlashPlayer9,AS3输出SWF,然后把这个SWF放到以下路径就完事了:
X:\Documents and Settings\UserName\Local Settings\Application Data\Adobe\Flash CS4\zh_cn\Configuration\WindowSWF
(红色部分按实际情况替换)
8. 终于大功告成了,打开Flash,在菜单“窗口 — 其他面板”下就可以找到你刚才创作的面板,欢呼吧!
9. 发布zxp扩展包
1、系统是否安装 Adobe Extension manager,安装 Flash 后默认都会有。
2、创建一个功能扩展安装文件(文件名以 .mxi 结尾的 XML 文档内容文件),并且准备好你发布好的 SWF 文件
3、在功能扩展管理器中,选择 “文件 > 打包 ZXP 扩展”
4、在随即出现的文件选择对话框中,浏览到您的功能扩展安装文件(文件名以 .mxi 结尾)并将其选定。单击“打开”。选择包文件的位置并指定它的名称(可以改名为 .mxp 结尾),保存。
注明:实际上,第3、4两步可以直接双击 mxi 文件来完成。设置导出的包名时,默认是 zxp ,你可以手动改为 xxx.mxp
mxi文件格式
- <macromedia-extension
- name="组件名称"
- version="版本号"
- type="Flash Component" >
- <author name="开发者" />
- <products>
- <product name="Flash" version="11" primary="true" />
- </products>
- <description>
- <![CDATA[ 组件介绍 ]]>
- </description>
- <ui-access>
- <![CDATA[ 组件使用说明 ]]>
- </ui-access>
- <license-agreement>
- <![CDATA[ 许可协议 ]]>
- </license-agreement>
- <files>
- <file source="component.swf" destination="$flash/Components[/yourpath]" />
- </files>
- </macromedia-extension>
相关推荐
jsfl面板 flash IDE插件,可以运行jsfl命令 用法 下载并安装 。 单击 Flash Pro 菜单中的 Window>Extensions>jsflPanel 打开 jsflPanel。 在textarea中输入jsfl命令,点击运行按钮运行命令。
基于JSFL的Flash自动测评系统研究
FLASH操作评分常用JSFL,FLASH操作评分常用JSFL,可制作FLASH的自评分练习题,可制作FLASH的自评分练习题,可制作FLASH的自评分练习题,
例说利用JSFL批改FLASH操作题的方法 FlashJavaScript(JSFL)是一种基于JavaScript的扩展脚本语言,让我们控制Flash的创作环境。 JSFL技术能帮助我们实现FLASH自动阅卷。
flash命令集,可导出Flash资源,批量发布fla文件,批量设置fla文件,设置库资源的类绑定等功能。
代码看懂了,又找了些jsfl的教程看了看,于是决定扩展一下功能,写个flash插件出来,至少带个操作界面,用时方便,毕竟这个东东不只是我用。 这个flash插件功能很简单,能够批量发布一个或多个文件夹下的fla文件,...
Flash CS5 Javascript 开发必备。 flash cs5 extending JSFL开发各种小工具,效果杠杠的。
1、打开含有连接类的Flash源文件; 2、输入想要查找的文件名(支持关键字); 3、路径输出再Flash工作台
适用版本:flash cs6 用法: 1.把脚本放到 C:\Users\lenoo\AppData\Local\Adobe\Flash CS6\zh_CN\Configuration\Commands下面; 2.重启flash; 3.打开一个fla文件; 4.导入序列图; 5.在库中选中刚才导入的序列图; ...
/////////////////////////////////// // //1、将文件另存为:RandomNameLibaray.jsfl //2、在flash中直接运行命令 // //////////////////////////////////
1、将文件另存为:RandomNameLibaray.jsfl 2、在flash中直接运行命令
这是一个flashCS系列使用的jsfl文件。首先打开fla文档(该fla文档必须被保存过),之后双击运行该文件会将当前正在编辑的时间轴转换成位图序列。 适合flash移动开发、 flash网游素材制作和优化、 flash stage3D材质...
jsfl中文帮助文档,Adobe官网最新版,Flash cs6(更新时间2013-6-+11)
jsfl一些jsfl的操作,用于前端做flash使用配置了化命令,调用flash 里面jsfl命令
jsfl技术文档(帮助文档),JSFL即flash编辑器的扩展js api
注意:“发布文件夹里的所有flash.jsfl”打开方式必须是flash软件(比如flash8,flashCS3,flashCS4...),如果你不会调整打开方式也可以把“发布文件夹里的所有flash.jsfl”这个文件直接拖进flash软件里。
利用FLash Javascript 接口,写的一个在flash CS中使用的自动描边的命令。 可以将一个静态文本自动打散-》自动描边-》自动填充颜色,提高Flash制作效率。
如果说AS是用来在SWF运行时运行的脚本,而jsfl则是在Flash编辑环境下运行的脚本。在这里我不想用太多专业的术语打击新手继续学习的信心,我想先带大家做一个非常简单的实验,可批量改名字