原地址:

http://www.cocoachina.com/gamedev/2012/1129/5212.html

MVC是三个单词的缩写,分别为:模型(Model)、视图(View)和控制Controller)。MVC是一个设计模式,它强制性地使应用程序的输入、处理和输出分开,将应用程序分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务,关系如图所示:

模型是数据层,视图是表现层,控制器是逻辑层,也对应于程序运行中的数据输入,数据处理,数据输出基本三步骤。事实上,MVC模式开发也适合游戏开发。

数据驱动

近日看到一篇Blog写的驱动法的使用心得,此博文总在强调数据与逻辑的对立,实现的技术就是表驱动。而将这种技术的升华一下,就是数据驱动技术。而这种技术应用到游戏中,就是数据驱动游戏开发了。在游戏未开发之前,定义通过一定的格式定义其数据元素,让美术资源与技术分离开了。

层次化设计

自从面向对象的程序设计方法称为主流之后,封装的概念非常之流行。类将对象的属性与方法封装在一起,随之而生就是模块化设计。通过开放相应接口,实现模块之间的通信。模块化设计可以说是程序设计的一大进步.而层次化设计方法也可以说模块化设计,只不过模块之间就用一定的列序关系。MVC模式关注于数据在程序运行中不同状态(数据层,逻辑层,表现层)的层次化设计

层次化设计有两个关键性问题:分层与整合。在设计的过程中,如何将整体设计分层,层与层之间的界定规范怎么确定。当各层次模块已经开发完成,如何整合它们使其在整体上实现无缝联接。

MVC模式很好的解决了上述两个问题。按照MVC模式的思路,游戏也可以划分相应的三层:数据层,逻辑层,表现层。其定义如下:

数据层就是各种资源(图片,声音,动画)在游戏引擎中形成的对象集合。美术提供的这些是最原始的,需要游戏引擎封装成一组可控的代码。在Cocos2D中就用相应的对象来直接初始化这些原始资源,比如Sprit,Menu,SimpleAudioEngine等等。这些对象在整个游戏中可以划分为数据层。最好的例子就是CocosBuilder生成的ccb文件通过引擎解析而成的类。当最原始的资源文件通过一定的文件格式组织起来,进而通过引擎形成对象集合,这是最可取的数据层生成方法。在捕鱼2中,多处的功能模块设计使用这样的方法。比如多国语言的本地化。所有的字段的翻译通过一个plist文件存储,形成一张二维表。当需要切换语言时,只需要改变某个key相对的Value就行了。逻辑层不需要做任何改变。

逻辑层可以划分为数据接口层,游戏AI层,操作控制层。数据接口层是负责从数据层中提供相应的数据对象进行封装组合。在这个层次上,类似与面向对象中类的属性定义,并提供控制(Set/Get)接口。这一层既可以是无结构化(原始数据类型定义),也可以是结构化(表,树,集合)。游戏AI层是逻辑层之核心,定义了其下面的各种数据元素的状态变化(金币数量,武器等级,动画播放……)。根据不同的状态变量,控制着数据元素的状态表现,是游戏的大脑,指挥控制中心。操作控制层,负责处理用户的输入,并注册或绑定相应的AI事件。在逻辑层中,数据接口层向下面对数据层,操作控制层向上面对用户行为事件,而游戏AI层统筹这两层。

表现层恰似于Cocos2D中的Direct与Scene,掌控着游戏的大背景,并负责将程序中的各个数据元素各种状态及时显示。

层次化设计在软件设计上应用非常之广,比如计算机网络中的TCP/IP网络模型(物理层,链路层,网络层,传输层,应用层),数据库技术(物理数据层,概念数据层,逻辑数据层)。其共同之特点是层次化,而数据库技术则强调数据与逻辑的独立性。

总结

数据驱动游戏开发在于实现数据与逻辑的分离,让游戏开发从数据层面独立出来,专注于设计,AI处理,实现游戏快速开发。当逻辑层成熟后,只需跟换不同的风格的数据层,就是另一款别样的游戏,能更快的满足用户的时尚审美需求。或许MVC模式可为之借鉴。

MVC模式在游戏开发的应用的更多相关文章

  1. MVC架构在游戏开发中的应用

    一 定义 MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVC是一种"前端"的设计模式. MV ...

  2. 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...

  3. 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)

    命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 实现原型模式 原型模式带来的好处就是,想要构建生成任意独特对象的 ...

  4. 浅析MVC模式与三层架构的区别01

    三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...

  5. MVC模式与三层架构的区别

    之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...

  6. 浅析MVC模式与三层架构的区别

    浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...

  7. 卡卡游戏引擎之MVC模式下的事件处理

    前言 在前一篇文章 卡卡游戏引擎快速入门中提到了卡卡游戏引擎采用mvc的开发模式,这里相信介绍一下引擎在mvc模式下是如何做到低耦合的事件处理的. 在卡卡编辑器中选择一个节点,然后在左侧工具栏中切换到 ...

  8. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  9. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

随机推荐

  1. Effective C# 学习笔记(原则一:始终能的使用属性(property),而不是可直接访问的Data Member)

    原则一:始终能的使用属性(property),而不是可直接访问的Data Member    Always use properties instead of accessible data memb ...

  2. C# 页面抓取类

    抓取网站页面的内容,简单的类应用,代码如下: /// <summary> /// 获取页面内容 /// </summary> /// <param name=" ...

  3. brew mac osx 上软件包管理工具

    今天推荐 Mac OSX 下,方便高效的包管理工具 brew brew 的全名叫做 Homebrew 它的功能类似于 ubuntu 下同下 apt-get ,或者 Cent OS 下的 yum 等包管 ...

  4. Android中使用WebView, WebChromeClient和WebViewClient加载网页

    在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android 中提供了其很好的支持, 其中webView的一系列用法,比如 webView.getSettings().s ...

  5. 用Java实现3DES

    3DES,即三重DES,是DES的加强版,也是DES的一个更安全的变形.它使用3个56位(共168位)的密钥对数据进行三次加密,和DES相比,安全性得到了较大的提高. 实际上,3DES是一个过渡的加密 ...

  6. OpenStack:安装Nova

    >安装Nova1. 安装# apt-get install nova-novncproxy novnc nova-api \  nova-ajax-console-proxy nova-cert ...

  7. 十一、从头到尾彻底解析Hash 表算法

    在研究MonetDB时深入的学习了hash算法,看了作者的文章很有感触,所以转发,希望能够使更多人受益! 十一.从头到尾彻底解析Hash 表算法 作者:July.wuliming.pkuoliver  ...

  8. POC - ASP.NET & MYSQL部分

    1. ASP.NET 用MYSQL是需要引入MYSQL的包的,这个在VS的TOOLS-> extension manager里可以搜到的 2. 接下来是WEBCONFIG里的配置信息 <c ...

  9. Qt 窗口等设置

    摘要: -------------------------------------------------- qt固定窗口大小: 一种方法是设置它的最大大小和最小大小,并且使它们的值相等,都等于当前你 ...

  10. homework-07 C++ 11 能好怎

    大二时候学过c++,但是那只是为了考试在学习,大作业也就写了一个读写者线程同步的模拟,连一个完整的类都没有写过,所以我必须承认对c++了解的很少. 对于C++ 11这一新标准,我首先阅读了来自前C++ ...