欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解CocosCreator MVC架构

程序员文章站 2022-06-22 14:32:46
概述这一篇将介绍在游戏客户端常用的架构mvc架构。一个游戏的mvc如下划分:m:1)单例全局的数据中心world,所有游戏模块的数据在world中有入口,2)各个模块自己的数据结构。v:1)通过cre...

概述

这一篇将介绍在游戏客户端常用的架构mvc架构。一个游戏的mvc如下划分:

m:1)单例全局的数据中心world,所有游戏模块的数据在world中有入口,2)各个模块自己的数据结构。

v:1)通过creator预制*作的ui界面、场景,2)各个界面显示逻辑的viewctrl

c:1)全局的mainctrl,2)各个模块的业务逻辑类modulectrl

具体模块

先介绍m部分。由于一个模块的数据,在其他模块也有访问的需求,例如好友模块,在聊天的时候也需要访问,在排行榜里需要访问。数据应该有一个单例全局的数据中心类world,所有游戏模块的数据类在world中有入口。这些数据可以在玩家登录后从服务器获取并设置。

export class world {
    private static instance: world = null;
 
    private _test: testdata = null;
 
    /**
     * 单例模式
     */
    private constructor() {
 
    }
 
    /**
     * 获取实例
     */
    public static get inst(): world {
        if (!world.instance) {
            world.instance = new world();
        }
 
        return world.instance;
    }
 
    // for test
    public set test(val: testdata) {
        this._test = val;
    }
 
    public get test(): testdata {
        return this._test;
    }
}

这样模块间可以独立设计自己的数据结构,通过发送消息请求对应模块的modulectrl更改,通过world读取。

详解CocosCreator MVC架构

export class testdata {
    private _text: string = null;
 
    public constructor() {
 
    }
 
    public set text(val: string) {
        this._text = val;
    }
 
    public get text(): string {
        return this._text;
    }
}

数据的更新时可以派发消息,界面可以监听消息做刷新。

下面介绍界面和脚本代码的关联。前面篇章中介绍过,cocos creator是基于组件模式。我将每个ui界面都做成一个预制体,每个预制体都可以添加一个脚本组件,用于控制这个界面的显示逻辑。

详解CocosCreator MVC架构

详解CocosCreator MVC架构

在弹窗管理里提到我设计了一个继承cc.component的类叫viewctrl,所有界面的显示逻辑类都继承viewctrl,并添加到对应的界面预制体。前面提到数据更新时会派发消息,viewctrl监听数据更新消息,刷新关联的界面。

const {ccclass, property} = cc._decorator;
 
@ccclass
export default class testviewctrl extends viewctrl {
}

viewctrl只处理界面的显示逻辑,不处理数据业务逻辑,模块的数据业务逻辑由该模块的modulectrl处理。viewctrl响应用户操作,派发消息,modulectrl监听消息处理。大部分模块的modulectrl主要做网络通信,和对本模块缓存数据的修改。

export class testctrl {
 
    public constructor() {
 
    }
 
    public init(): void {}
 
    public start(): void {
        notifycenter.addlistener(msg_test_http, (src: any, data: any) => {
            this.testhttp();
        }, this);
    }
 
    public testhttp(): void {
        let data = {
            mod: 1, // 模块
            cmd: 1, // 命令
        }
 
        let params: httpreq = {
            path: "",
            method: http_method_get
        }
 
        mainctrl.inst.http.senddata(data, params, (data: netdata) => {
            world.inst.test = new testdata();
            world.inst.test.text = "123";
        }, (code: number, reason: string) => {});
    }
}

前面提到,c层还有一个全局单例的mainctrl。该类主要负责模块注册、提供全局的操作接口(例如界面/场景的显隐)、网络通信处理。

以上就是详解cocoscreator mvc架构的详细内容,更多关于cocoscreator mvc架构的资料请关注其它相关文章!

相关标签: Cocos MVC 架构