原地址:

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. jquery跨域调用wcf

    使用jquery跨域调用wcf服务的时候会报如下错误 $.ajax({ url: 'http://localhost:28207/Service1.svc/GetData', method: 'get ...

  2. C#中virtual和abstract的区别

    先说区别: virtual意思是虚拟,abstract意思是抽象. virtual只修饰方法,abstract修饰方法和类. virtual方法必须有实现,abstract方法必须没有实现. publ ...

  3. java学习资源汇总

    http://www.tutorialspoint.com/jsp/jsp_standard_tag_library.htm

  4. Web Design:给实验室UI们的一堂课(下)

    [讲稿]From top to down,自顶向下哈,首部栏.导航栏之后一般是页面的主模块,也就是Body部分,这一块儿才是你网站的核心内容,文章.新闻.动态.数据.图表.相册等都是在这儿体现出来.在 ...

  5. linux动态库编译和使用详细剖析

    引言 重点讲述linux上使用gcc编译动态库的一些操作.并且对其深入的案例分析.最后介绍一下动态库插件技术, 让代码向后兼容.关于linux上使用gcc基础编译, 预编译,编译,生成机械码最后链接输 ...

  6. oracle 临时表空间

    环境: OS: Oracle Linux Server release 5.7 DB: Oracle Database 11g Enterprise Edition Release 11.2.0.3. ...

  7. hdu 2094 产生冠军

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2094 产生冠军 Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比 ...

  8. ios 中怎么自定义(RGB)背景色

    1.定义RGB 色彩.随机颜色 我的抽为宏定义.便于各个文件中使用 // 1.获得RGB颜色 #define MTColor(r, g, b) [UIColor colorWithRed:(r)/25 ...

  9. b75,gtx560,I5 安装10.10.2

    1.安装变色龙,wowpc.iso,这个是可以让电脑从windows引导 mac 安装的. 2.把黑苹果CDR压到一个硬盘分区里去. 3.安装10.10.2,把安装盘里的extra拷贝到 系统盘里 , ...

  10. INPC & RaizePropertyChanged in mvvmlight

    INPC & RaizePropertyChanged in mvvmlight In WPF app, MvvM Framework, we binding the UIElement fr ...