Laan's steps..

Feed Rss

flash模块开发

02.21.2009, flash, by .

模块开发对于大项目而言还是蛮有用的。优点很多啊。使用flex进行模块开发还不错,毕竟人家都已经提供了module。我是没有深入研究它里面的实现。不过可以肯定的一点就是:使用Loader来载入各个模块,被载入模块依附主体模块。我说的依附,就是使用主体的类资源。

这个原理同样可以用在flash模块开发:在主swf中使用Loader来加载各个模块swf——当然是加载到同程序域(ApplicationDomain)下;加载到别的程序域里也可以,不过在各模块通信时就比较麻烦点。

接下来就是各模块的通信了。一般的方法是使用接口:每个模块swf实现一个或多个接口,主swf加载模块后通过调用接口方法来通信,比如模块B.swf实现了接口IEventDispacher(当然也可以自定义接口),然后在主swf中使用Loader加载后:

var eventDispacher:IEventDispacher = loader.content as IEventDispacher;

然后便可以调用IEventDispacher定义的方法来与模块通信。

这是面向接口的编程思想——接口是个好东西啊!当然,还有一种不是面向接口的调用:

var obj:Object = loader.content;

然后你模块中定义了什么方法,就在obj上使用什么方法。要是你是一个人开发,那没什么问题,反正模块有什么方法你也知道。但是如果是一个团队的协同开发,还是面向接口好。

以上是关于模块开发中的模块通讯。然后就是怎么发布各个模块。很多时候各个模块是公用很多资源的,比如你写了个StringUtils类,然后在各个模块中都使用到了。这时候你使用传统的flash导出发布后,每个模块都把这个类编译进去了。而实际上,只需要在主swf中存在该类就可以了——当模块swf被加载到与主swf同域后完全可以直接使用主swf已定义的类资源。

于是你需要将各个模块swf中公用部分的资源剔除,或者是在编译时exclude——两种方法:

1:剔除,就是从已编译后的模块swf中剔除一些主swf存在的类。你可以在这里使用swf picker>>>

2:exclude。原理是使用jsfl文件+一个exclude列表来执行编译导出。文件可以在这里下载>>>

使用方法:

如果你的文件为abc.fla,将_exclude.jsfl改命为abc_exclude.jsfl,将_exclude.xml改命为abc_exclude.xml,都放置与abc.fla同目录下;在abc_exclude.xml中添加需要exclude的类名称。然后执行abc_exclude.jsfl文件即可。

申明:exlcude方法作者地址为:http://exanimo.com/actionscript/flash-cs3-and-exclude-xml/

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>