欢迎光临
我们一直在努力

某游戏源码阅读

***源码分析

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
全局警告信息

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《某游戏源码阅读》
文章链接:https://www.456zj.com/41026.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址