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文件格式

[html] view plaincopyprint?
  1. <macromedia-extension
  2. name="组件名称"
  3. version="版本号"
  4. type="Flash Component" >
  5. <author name="开发者" />
  6. <products>
  7. <product name="Flash" version="11" primary="true" />
  8. </products>
  9. <description>
  10. <![CDATA[ 组件介绍 ]]>
  11. </description>
  12. <ui-access>
  13. <![CDATA[ 组件使用说明 ]]>
  14. </ui-access>
  15. <license-agreement>
  16. <![CDATA[ 许可协议 ]]>
  17. </license-agreement>
  18. <files>
  19. <file source="component.swf" destination="$flash/Components[/yourpath]" />
  20. </files>
  21. </macromedia-extension>

使用 jsfl 发布flash IDE 插件相关推荐

  1. IDE 插件新版本发布,总有一个功能帮到你——开发部署提速 8 倍

    对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码.多干一些活来实现多产:而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的 ...

  2. KCL v0.4.6 重磅发布! 全新的 IDE 插件,Helm/Kustomize/KPT 工具集成

    KCL 团队很高兴地宣布 KCL v0.4.6 新版本现在已经可用!本次发布为大家带来了三方面的重点更新:语言.工具链.社区集成 & 扩展支持. 使用 IDE 插件提升 KCL 代码编写体验和 ...

  3. 开发部署提速8倍!这款IDE插件了解一下?

    对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码.多干一些活来实现多产:而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的 ...

  4. 好物推荐|下载超过 23w 次的 IDE 插件,让效率飞速提升

    日常开发运维的过程中,我们总是会遇到各样重复性劳动而这些工作占据了我们大量时间. 我们一定都经历过这样的场景: 每一次产品迭代更新,都要一遍遍「打包-上传-登录服务器-替换-部署-重启」重复的类似工作 ...

  5. 开源软件 Apache Dubbo 牵手 IDE 插件,开发部署提速不止 8 倍

    自从产品经理银时小伙和他的团队在去年11月发布 Cloud Toolkit(一款 IDE 插件)以来,已帮助数以万计的开发者们提高了开发.测试.诊断以及应用部署效率.期间,他们还发布了 Contrib ...

  6. Spring Boot Initilizr - 使用IDE或IDE插件

    Spring Boot Initilizr 使用IDE或IDE插件 这是我之前的帖子的延续.在阅读这篇文章之前,请先阅读我在" Spring Boot Initilizr Web界面 &qu ...

  7. 奥拉星插件flash下载手机版下载安装_安卓手机怎么安装Adobe Flash Player插件,看完你就知道了...

    安卓手机安装Adobe Flash Player插件有两种方法,一种是通过电脑网页下载安装包,然后将该安装包通过QQ传输到手机上进行安装:另一种是直接在手机系统的应用商店里面,搜索并下载安装Adobe ...

  8. 让开发部署提速 8 倍,我参与贡献这款 IDE 插件的全过程

    如何像参与开源那样,去参与一款 IDE 插件的设计? 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能? 自从产品经理银时小伙和他的开发小哥们在去年12月发布 Cloud Toolkit( ...

  9. 让开发部署提速 8 倍的 IDE 插件

    转载自"阿里巴巴中间件" ✅ 如何像参与开源那样,去参与一款 IDE 插件的设计? ✅ 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能? 自从产品经理银时小伙和他的开 ...

最新文章

  1. 中国机器人产业发展报告(2018)正式发布!
  2. 全国大学生智能汽车竞赛证书打印方法
  3. gradle构建android项目
  4. 01.WPF中制作无边框窗体
  5. 安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo
  6. ant编译无法依赖rt.jar
  7. redhat 添加ssh端口_Linux修改SSH远程登录端口 --服务器安全篇
  8. pushpop指令的操作数必须是字操作数_MCS-51单片机指令系统(1)
  9. unity3d Crease效果分析
  10. linux中引号的作用是什么意思,Linux中的双引号的作用
  11. div内li标签间距_css怎样让li间距增大?
  12. 面对新的挑战,成为更好的自己--进击的技术er
  13. 【推荐架构day2】微博怎么给你推荐信息的:基本原理
  14. python(2048)
  15. 八年级地理上册复习提纲(星球版)
  16. Spans,一个强大的概念
  17. 使用terminalizer工具录制终端生成GIF动画
  18. 信号与系统 - 卷积运算
  19. RabbitMQ-客户端源码之ChannelN
  20. Laravel学习笔记 ViewComposer

热门文章

  1. python调用外部程序 退出_Python调用外部程序——os.system()和subprocess.call
  2. ashx在web.config中如何配置_网络中,什么是半双工与全双工?它们如何配置
  3. 全志 A64 开发板移植SQLite3
  4. 为VIP解决问题时写的源码
  5. odoo开发笔记 -- 翻译机制及导入.po文件
  6. Java IO流简介
  7. JavaSE面向对象-笔记
  8. Mysql安装及其配置
  9. spring cloud gateway Unhandled failure: Only one connection receive subscriber allowed.
  10. [C#]System.Timers.Timer