用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');");

直接粘贴官方文档

runscript
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

今天先写到这...公司请吃香辣蟹....闪

posted @ 2010-06-13 14:14  yinaak  阅读(461)  评论(0编辑  收藏  举报