***源码分析
1.项目主要分为com包,controller包,data包,view包,lang包,protocols包,haloer包,assist包。
haloer是工具包,assist是资源接口包,也有一些工具类,还包括配置文件类,
2.com包下的Controller, Data, View理解成 ControllerManager, DataManager, ViewManager更合适一些。
这三个类都有各自的基类,基类又统一继承自SuperBase(理解成三个Manger的基类)。
(个人觉得作为Manager直接继承SuperBase就可以,不需要再额外定义基类)
controller负责创建并返回游戏所有模块的controller
data负责创建并返回游戏所有模块的data
view负责创建并返回游戏所有模块的view
而每个模块真正的controller,data,view又统一继承自SuperSubBase,这个SuperSubBase和之前的SuperBase没有任何关系。
任何一个SuperSubBase都持有ControllerManger DataManger ViewManger的引用。
Controller Data View都是单例,在游戏初始化的时候创建一次。
启动的时候为三个Manger提供一个timer函数和enterframe函数
3.DataManger
提供对socket的操作封装
在初始化的时候注册所有protocols
4.ViewManager
管理所有模块的view
通过structure控制显示列表层级
控制view的center显示(每个view都有一个控制position的function,统一用一个不更好?)
在初始化的时候注册所有assest
负责加载view对应的asset
加载进度条的view控制
右键菜单和底部的游戏信息
快捷键控制
Tip控制
定义一些view的互斥等配置内容
地图跳转
延迟调用
5.Controller
每个模块的control继承自controller包下面的base,这个base又继承supersubbase
control主要是封装了一些业务逻辑,提供data中的信息给view
(view中也持有DataManger的使用,但view并没有通过DataManager获取data,而是通过control获取)
6.Data
每个模块的data继承自data包下面的base,这个base又继承supersubbase
data主要是存储模块数据,并负责解析服务器端发送的socket数据
7.View
会调用ViewManager提供的asset加载功能
view并不是可现实对象,本质上是一个proxy,真正能被显示的是各自模块的 IView
IView是每个模块的接口,提供了该模块所有的功能接口,
view只是把IView需要的内容比如鼠标响应事件等逻辑注入到IView中
IView虽然提供了show,close方法,但并不是所有的view都需要这两个方法,比如tip2view的show不做任何操作
在assit下的interface有一个icontent接口,但似乎有些模块的view并没有继承这个icontent,为什么?
8.MVC交互流程
view调用datamanager的call方法请向服务器发起请求,并同时注册回调函数
datamanager接受服务器返回的数据,交给各自模块的data分析,
datamanager在数据被data分析之后,回调view注册进来的方法
主项目定义好每个模块的control,data,view,定义好每个view的interface,
每个模块一个flash cs项目,这个项目继承自各自view的interface~
这个为模块化开发提供了一个思路。模块间的通信都是通过主项目来进行!!
反编译每个模块的flash文件,发现每个模块或多或少都会protocol assist lang下面的一些文件编译进去,有些甚至是用不到的,这个貌似很浪费?
9.structure
viewManager的初始化会带动structure的初始化
游戏层级:background-content-popup-alert-load-tip-mouse
background似乎没用到
content是screenview中的_screen容器,_screen中又包含mapview和toolbar
popup是所有view的容器
alter是alter的容器,也是trigger(新功能开启)的容器
load似乎没有用到
tip是tipview和tip2view的容器,也是boxgrid的draylayer,还是mapstatic的effectlayer
mouse是鼠标
11.pupop
初始化的时候从ViewManager中读取view的互斥等配置信息
12.tip
tip2view弹出时的消息,被当作一个ui处理,ui内部自动移动,支持btn到mid的移动,mid到top的移动,能自动消失~
有警告,成功,失败等类型
tipview本质上对是assist下的Tip的一个代理,assist下的tip是纯代码编写,就是一个TipManager。
某个对象的menu列表也被当作tip来控制,交由这个TipManager管理
13.alert
全局警告信息