原地址:

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. MarkDown写作技巧

    前言 年轻的我们往往苦恼于没有充实的社会经历.社会阅历,很难有较强的个人能力.个人魅力!就个人能力而言,本 人主要把它分为两种:“吸收能力”和“输出能力”.吸收能力主要体现了个人对外界知识的摄入能力, ...

  2. scrapy爬虫框架入门教程

    scrapy安装请参考:安装指南. 我们将使用开放目录项目(dmoz)作为抓取的例子. 这篇入门教程将引导你完成如下任务: 创建一个新的Scrapy项目 定义提取的Item 写一个Spider用来爬行 ...

  3. python 类属性和实例属性

    class AAA(): aaa = 10 # 情形1 obj1 = AAA() obj2 = AAA() print obj1.aaa, obj2.aaa, AAA.aaa # 情形2 obj1.a ...

  4. 在WPF中显示GIF图片并实现循环播放

    WPF中有一个MediaElement媒体控件,可以来播放媒体,同时也可以显示GIF图片.但看到网上有些人说用MediaElement不能加载作为资源或内嵌的资源的GIF图片,我猜他们一定是在前台用X ...

  5. 微信支付开发,再次签名,APP调用

    1.商户服务器生成支付订单,先调用[统一下单API]生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付. 再次生成签名的时候,按照接口: https://pay.weixin.q ...

  6. hdu 1269 迷宫城堡

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1269 迷宫城堡 Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个 ...

  7. base64和图片的互转(HTML5的File实现)

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  8. Json.Net使用JSON Schema验证JSON格式

    Json.NET supports the JSON Schema standard via the JsonSchema and JsonValidatingReader classes. It s ...

  9. EF之外键Include() left join

    项目中用EF实现外键查询出的数据, 查询数量正确, 但实现返回数据集数量不对 //DbContext.cs HasRequired(s => s.ClassRoom) .WithMany() . ...

  10. NABC的特点分析

    题目:                         请把采用卡片分类的方法讨论你们的团队开发项目特点,再按照 NABC 的框架分析每个特点. 每一个组员针对其中的一个特点将NABC的分析结果发表博 ...