詳解CocosCreator MVC架構(gòu)
概述
這一篇將介紹在游戲客戶端常用的架構(gòu)MVC架構(gòu)。一個游戲的MVC如下劃分:
M:1)單例全局的數(shù)據(jù)中心World,所有游戲模塊的數(shù)據(jù)在World中有入口,2)各個模塊自己的數(shù)據(jù)結(jié)構(gòu)。
V:1)通過creator預(yù)制體制作的UI界面、場景,2)各個界面顯示邏輯的ViewCtrl
C:1)全局的MainCtrl,2)各個模塊的業(yè)務(wù)邏輯類ModuleCtrl
具體模塊
先介紹M部分。由于一個模塊的數(shù)據(jù),在其他模塊也有訪問的需求,例如好友模塊,在聊天的時候也需要訪問,在排行榜里需要訪問。數(shù)據(jù)應(yīng)該有一個單例全局的數(shù)據(jù)中心類World,所有游戲模塊的數(shù)據(jù)類在World中有入口。這些數(shù)據(jù)可以在玩家登錄后從服務(wù)器獲取并設(shè)置。
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;
}
}
這樣模塊間可以獨立設(shè)計自己的數(shù)據(jù)結(jié)構(gòu),通過發(fā)送消息請求對應(yīng)模塊的ModuleCtrl更改,通過World讀取。

export class TestData {
private _text: string = null;
public constructor() {
}
public set text(val: string) {
this._text = val;
}
public get text(): string {
return this._text;
}
}
數(shù)據(jù)的更新時可以派發(fā)消息,界面可以監(jiān)聽消息做刷新。
下面介紹界面和腳本代碼的關(guān)聯(lián)。前面篇章中介紹過,cocos creator是基于組件模式。我將每個ui界面都做成一個預(yù)制體,每個預(yù)制體都可以添加一個腳本組件,用于控制這個界面的顯示邏輯。


在彈窗管理里提到我設(shè)計了一個繼承cc.Component的類叫ViewCtrl,所有界面的顯示邏輯類都繼承ViewCtrl,并添加到對應(yīng)的界面預(yù)制體。前面提到數(shù)據(jù)更新時會派發(fā)消息,ViewCtrl監(jiān)聽數(shù)據(jù)更新消息,刷新關(guān)聯(lián)的界面。
const {ccclass, property} = cc._decorator;
@ccclass
export default class TestViewCtrl extends ViewCtrl {
}
ViewCtrl只處理界面的顯示邏輯,不處理數(shù)據(jù)業(yè)務(wù)邏輯,模塊的數(shù)據(jù)業(yè)務(wù)邏輯由該模塊的ModuleCtrl處理。ViewCtrl響應(yīng)用戶操作,派發(fā)消息,ModuleCtrl監(jiān)聽消息處理。大部分模塊的ModuleCtrl主要做網(wǎng)絡(luò)通信,和對本模塊緩存數(shù)據(jù)的修改。
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。該類主要負(fù)責(zé)模塊注冊、提供全局的操作接口(例如界面/場景的顯隱)、網(wǎng)絡(luò)通信處理。
以上就是詳解CocosCreator MVC架構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于CocosCreator MVC架構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript中的prototype屬性使用說明(函數(shù)功能擴(kuò)展)
一說到prototype很多人可能第一個想到的是著名的prototype.js框架,當(dāng)然我們今天說的不是它,而是Javascript中的prototype屬性,一般都被翻譯為“原型”。2010-08-08
JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹的計數(shù)算法示例
這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)之二叉樹的計數(shù)算法,結(jié)合具體實例形式分析了javascript二叉樹記錄更新次數(shù)的原理與操作技巧,需要的朋友可以參考下2017-04-04
Jquery把獲取到的input值轉(zhuǎn)換成json
本篇文章主要介紹了Jquery把獲取到的input值轉(zhuǎn)換成json的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧2017-05-05
JavaScript @umijs/plugin-locale插件使用教程
這篇文章主要介紹了JavaScript @umijs/plugin-locale插件使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-12-12
微信小程序防止多次點擊跳轉(zhuǎn)(函數(shù)節(jié)流)
這篇文章主要介紹了微信小程序防止多次點擊跳轉(zhuǎn)問題(函數(shù)節(jié)流),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
BootStrap智能表單實戰(zhàn)系列(七)驗證的支持
這篇文章主要介紹了BootStrap智能表單實戰(zhàn)系列(七)驗證的支持 ,凡是涉及到用戶編輯信息然后保存的頁面,都涉及到一個數(shù)據(jù)是否符合要求的檢查,需要客服端和服務(wù)器端的校驗的問題,本文介紹非常詳細(xì),具有參考價值,需要的朋友可以參考下2016-06-06

