原地址:

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. ng-summit and $watch() funciton

    <div ng-app> <form ng-submit="requestFunding()" ng-controller="StartUpContro ...

  2. python 从private key pem文件中加载public key

    import rsa import logging from Crypto.PublicKey import RSA class RsaUtil: def __init__(self, pem_fil ...

  3. python去掉空行

    #用strip(),split()两个方法都可以判断空行 infile=open('/.../','r') outfile=open('/.../','w') for li in infile.rea ...

  4. opengl基础学习专题 (二) 点直线和多边形

    题外话 随着学习的增长,越来越觉得自己很水.关于上一篇博文中推荐用一个 学习opengl的 基于VS2015的 simplec框架.存在 一些问题. 1.这个框架基于VS 的Debug 模式下,没有考 ...

  5. 安装SQL Server Management Studio遇到的29506错误

    首先要在IIS里把internet 信息哪项选上.然后在安装SQL Server, 在安装的时候一直报 29506错误,装了几次,不知道什么原因.谷歌了一下说是权限的问题. 很纳闷,我当然用的是管理员 ...

  6. Python性能优化的20条建议 (转载)

    优化算法时间复杂度 算法的时间复杂度对程序的执行效率影响最大,在Python中可以通过选择合适的数据结构来优化时间复杂度,如list和set查找某一个元素的时间复杂度分别是O(n)和O(1).不同的场 ...

  7. DB2行转列(多维度)

    多维度下进行行列转换,下面的行列转换时根据客户,所属银行机构进行的行列转换. -----------------建表 CREATE TABLE CUST_BANK_INFO ( CUST_ID ), ...

  8. poj 2312 Battle City

    题目连接 http://poj.org/problem?id=1840 Battle City Description Many of us had played the game "Bat ...

  9. wget的下载与安装使用

    wget的下载与安装:下载地址:ftp://ftp.cs.cuhk.edu.hk/pub/gnu/gnu/wget安装:先把wget下载到的tar文件解压,然后cd到wget目录下# ./config ...

  10. SQL Server数据库学习笔记-设计表时应该考虑的因素

    设计数据库其实就是设计数据库中的表.到底要注意些什么才能够设计好一个数据库呢?一个宗旨,8个建议. 一个宗旨“尽量少的表,每个表中尽量少的列,合理的表结构”. 8个建议: 第一个,首先要考虑的是咱们这 ...