用flash给fireworks开发功能面板
fireworks是支持脚本命令控制的
各种集成好的功能面板可以在网上搜到一大堆.
但是可能很难找到自己想要的,或者多个功能在不同的面板
为了方便&效率 可以利用flash的AS3编程把这些集成到一个面板里面.(网上大多功能面板都提供源代码 或 重要代码片段)
为了制作方便的fireworks功能面板
我们需要用到AS3 API中提供的 很不方便的接口(fireworks中的flashplayer不会弹出任何错误信息和调试信息,所以出错时只会停止 或者 跳过flash中的命令.编写需要细心)
adobe.utils 包中包含供 Flash 创作工具开发人员使用的函数和类。
函数 | 说明 | |
---|---|---|
MMEndCommand | 通知承载 SWF 命令的应用程序已执行一个命令,并指示应用程序是提交还是丢弃 MMExecute() 命令所提交的更改。 | |
MMExecute | 允许从 ActionScript 中发出 Flash JavaScript API (JSAPI) 命令。 |
大部分情况 只使用 MMExecute
例如:
//使用fireworks 打开编译的swf功能面板 弹出消息框 MMExecute("alert('弹出fireworks中的消息窗口');"); //传递参数 var msg:String = "hello"; 双引号 " 这里需要加\被转义 才能传递进fireworks命令中 MMExecute("alert(\""+msg+"\")"); //特殊情况 换行 \n 换行符 也需要转义才能传递进fireworks命令中 MMExecute("alert('第一行\\n第二行')");
假如你已经编译好了swf文件,现在就可以将它放入$Fireworks\configuration\Command Panels\flash面板
然后重启fireworks,你将会在菜单栏的 窗口(Windows) → flash面板 中找到你放入的SWF文件.
当然这么简单的功能只能满足hello world...
MMExecute可以调用fireworks中的任意API(参见http://help.adobe.com/en_US/fireworks/cs/extend/index.html)
美术的各种操作可以从fireworks中的历史记录面板中找到
例如:
选中所有命令行 然后点击红框里的按钮,就可以把命令拷贝到剪切板
粘贴出来如下:
fw.getDocumentDOM().addNewRectanglePrimitive({left:276, top:89, right:472, bottom:282}, 0);
fw.getDocumentDOM().addNewOval({left:81, top:166, right:202, bottom:303});
转化为在flash执行即粘贴到到MMExecute的参数中再加上" "
MMExecute("fw.getDocumentDOM().addNewRectanglePrimitive({left:276, top:89, right:472, bottom:282}, 0);fw.getDocumentDOM().addNewOval({left:81, top:166, right:202, bottom:303});");
当然需求中操作命令可能非常多,我们需要分工好flash和fireworks之间的工作.
简单的操作我们可以直接试用MMExecute来执行,
复杂的操作可以使用下面的方法
MMExecute("fw.runScript('fireworksAPI.jsf');");
直接粘贴官方文档
fw.runScript()
Availability
Fireworks 3.
Usage
fw.runScript(filename)
Arguments
filename
The name of the script file to execute. If filename is not a file URL (that is, if it does not begin with "file:///"), it is assumed to be the name of a file in the Fireworks /Configuration/Commands folder.
Returns
Result of script.
Description
Executes a JavaScript file.
fw.runScript() 可以直接用来执行一段jsf脚本.
最后还可以使用var returnStr:String = MMExecute("fw.runScript('fireworksAPI.jsf');");
得到jsf脚本返回的参数.当然MMExecute只返回String类型.如boolean型的返回值 将会是"true","false" 字符串类型
当然有更好的方法去获得和传入参数.
传入参数:
例如://var a:int = 10;
MMExecute("var a = " + a +";");
这样直接运行后相当于在fireworks申明了 全局变量 a 在关闭此flash面板前 对于其他的面板或普通jsf命令也可以得到 a 的值
任意命令都可以找到这个变量
例如 //将弹出窗口 10
MMExecute("alert(a);");
获得参数://这里有点小小的鸡肋,不能获得对象的引用.只能获得值. 不过也够了,因为fireworks中的对象只能在fireworks中使用
例如:获得刚刚传入的a
var b:int = MMExecute("a") as int;
到这里所有方法都介绍完毕了
接下来是一些细节和心得.
1.fw.disableFlashDebugging() & fw.enableFlashDebugging()
作为关闭和打开flash调试,这个命令显得非常无力...
打开调试仅会用消息框通知你 你用MMExecute调用的命令进入fireworks中的形式,比如你传递了一个变量,会直接显示变量的值
某一些操作会弹出很多很多的消息框 等你 按确定 (比如:导出操作)
唯一值得使用的地方大概就是可以观察你的程序的工作流程,如有错的话 可以分析在哪一步停止没有弹出消息框.
最后不推荐使用...推荐自己使用MMExecute调用alert函数来确定工作流程.
2.复杂类型的参数传递 (array,object)
array 很简单 直接试用join('分隔符'),然后另一方获取的时候使用split('分隔符') 就可以获取了
object 稍作分析的话 也很简单.MMExecute传出的是一个String,即在object中加入 toString的方法即可
例如
var obj:Object = {
a:1,
b:10,
c:100,
d:1000,
toString:function(){return this.a+","+this.b+","+this.c+","+this.d};
};
当然这里我偷懒了,object 返回一个字符串,然后还是把字符串使用split(',') 分割为一个数组.
当然你可以改写里面的toString方法 让它返回一个JSON字符串供你操作.
相关资料
http://web.r-studio.jp/Fireworks_extensions/articles/flashpanel-as3memo.html
今天先写到这...公司请吃香辣蟹....闪