`
NewTamato
  • 浏览: 101466 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

程序架构

阅读更多

 

A项目,B项目,C项目,D工程。三个工程可以独立运行。B项目嵌入到A项目中。C的主要作用是将ABD工程整合在一起。将ABD各自生成的swf文件放在C的目录下。然后一个一个的加载进来,并监听Event.COMPLETE事件。

加载类为AppLoad,子类为A_AppLoad, B_AppLoad, D_AppLoad.负责加载各个swf,然后监听加载完成事件。

private function onSwfLoaded(evt:Event):void

              {

                     var loaderInfo:SWFLoader = evt.target as SWFLoader;

                     loaderInfo.removeEventListener(Event.COMPLETE, onSwfLoaded);

                    

                     if(loaderInfo.content as SystemManager)

                     {

                            var sysMgr:SystemManager = loaderInfo.content as SystemManager;

                            sysMgr.addEventListener(FlexEvent.APPLICATION_COMPLETE, onAppComplete);

                     }

                     else

                     {

                            fetchExportClass(loaderInfo.content);

                     }

              }

这部分是因为swf分为两个部分,第一个部分是preloader,第二部分是应用程序。第一次加载内容是要创建SystemManager。然后进入第二部分,创建应用程序。SystemManager创建完成之后呢。就要调用fetchExportClass(),这个方法的是想从各个的swf中获得总接口。这个方法发送一个得到总接口的事件Event。在swfApplication应用中监听这个特殊的事件。收到后就将这个总接口实例化放在另一个事件中作为数据传回来,在处理这个传回来的事件中进行总接口的初始化。(就是加载的这个应用的总接口的初始化),同时监听总接口的完成事件,这个借口初始化那么它所管理的dataMgrGuiMgrNetMgr也就开始初始化!

总接口初始化完成发送一个Proxy.dispatchEvent(Event.Complete).在处理总接口完成事件的方法中,appLoad就要发送一个工程初始化完成事件(这个时候由于总接口的初始化完成其他的接口也已经完成了实例化)。就是相当于加载彻底完成的事件。

然后由于A要嵌入B,那么将B的总接口付给A就可以了。

 

这个过程要注意的问题是:1、分清事件的发送者和接收者

2、看清流程

即是:先加载swf。然后根据swf提供的application获得这个应用的总接口(proxy)。然后根据这个总接口进行初始化。把各个模块进行了初始化(继而他们的guiMGrdataMgrNetMgr也就初始化了)。总结口初始化完成之后我们发送一个Event事件,表明swf就加载完成了。

然后将得到各个工程的总接口。剩下的工作便是组合!

,C项目。B三个部分可以独立运行。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics