cocos creator中的MVC设计模式

在游戏开发的行业中摸爬滚打走了很多路,在这里将我的经验分享给大家。无论是unity或者是cocos,白鹭…在游戏的设计框架中大多数程序员还是遵循MVC来开发的。今天的涉及就是MVC模式,我以creator + typeSprite讲解。

 首先为什么用MVC,好处又是什么呢?MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性、可移植性,代码的可重用性。

 MVC即Model、View、Controller即模型、视图、控制器。阅读别人的代码时发现,很多程序员倾向于将软件的业务逻辑放在Controller里,将数据库访问操作的代码放在Model里。

最终软件(网站)的代码结构是,View层是界面,Controller层是业务逻辑,Model层是数据库访问。

废话不多说,下面开始我们的代码之旅。

整个程序启动的函数

import ABCView from “./ABCView”
import { ABCCtl } from “./ABCCtl”
const {ccclass, property} = cc._decorator;

@ccclass
export default class Helloworld extends cc.Component {

@property(ABCView)
public eView: ABCView = null; 

public onLoad() {
    ABCCtl.getInstance().init({
        name : "张三",
        age: 16,
    }, this.eView)
}

}
control类

import { IAbc } from “./ABCM”;

export interface IAbcCtlDelegate {
onSubmitResult(): void;
}

const {ccclass, property} = cc._decorator;
@ccclass
export class ABCCtl {
private static sInstance: ABCCtl = null;

public static getInstance(): ABCCtl {
    if (!ABCCtl.sInstance) {
    ABCCtl.sInstance = new ABCCtl();
    }
    return ABCCtl.sInstance;
}
public mData: IAbc = null;
private mDelegate: IAbcCtlDelegate = null;
public init(data: IAbc, delegate: IAbcCtlDelegate) {
    this.mData = data;
    this.mDelegate = delegate;
}

public summit() {
    this.mDelegate.onSubmitResult();
}

}
view界面类

import { IAbcCtlDelegate, ABCCtl } from “./ABCCtl”;

const {ccclass, property} = cc._decorator;

@ccclass
export default class ABCView extends cc.Component implements IAbcCtlDelegate {

public onclickSummit() {
    ABCCtl.getInstance().summit();
    // 界面显示
}
onSubmitResult(): void {
    throw new Error("Method not implemented.");
}

}
model数据类

export interface IAbc {
name: string;
age: number;
}
如果想到在外调用view层的代码,只能通过control类去调取,当然在代码中也添加了代理模式。以上就是针对MVC的设计模式了。鄙人自己感觉这套模式在基本的小游戏,中型游戏中都可以借用这套模式去开发。

发布了205 篇原创文章 · 获赞 39 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/u013321328/article/details/104240903