• 某游戏源码阅读


    ***源码分析


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

  • 相关阅读:
    接口开发中的 RestTemplate 传参问题
    逆流成河:五年软件开发生涯
    .NET Web开发技术简单整理
    2011-05-29 21:48 VS.NET2010水晶报表安装部署[VS2010]
    WPF 基础到企业应用系列3——WPF开发漫谈
    C# WinForm开发系列
    接口和委托的区别
    通过jquery触发select自身的change事件
    php去掉字符串中的最后一个字符和汉字
    Go语言学习之数据类型
  • 原文地址:https://www.cnblogs.com/tianlanliao/p/3667319.html
Copyright © 2020-2023  润新知