MVC模式在游戏开发的应用
原地址:
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模式在游戏开发的应用的更多相关文章
- MVC架构在游戏开发中的应用
一 定义 MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVC是一种"前端"的设计模式. MV ...
- 游戏开发设计模式之状态模式 & 有限状态机 & c#委托事件(unity3d 示例实现)
命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 原型模式:游戏开发设计模式之原型模式 & unity3d ...
- 游戏开发设计模式之原型模式 & unity3d JSON的使用(unity3d 示例实现)
命令模式:游戏开发设计模式之命令模式(unity3d 示例实现) 对象池模式:游戏开发设计模式之对象池模式(unity3d 示例实现) 实现原型模式 原型模式带来的好处就是,想要构建生成任意独特对象的 ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- MVC模式与三层架构的区别
之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...
- 浅析MVC模式与三层架构的区别
浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...
- 卡卡游戏引擎之MVC模式下的事件处理
前言 在前一篇文章 卡卡游戏引擎快速入门中提到了卡卡游戏引擎采用mvc的开发模式,这里相信介绍一下引擎在mvc模式下是如何做到低耦合的事件处理的. 在卡卡编辑器中选择一个节点,然后在左侧工具栏中切换到 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- ASP.Net MVC开发基础学习笔记(1):走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
随机推荐
- EditText 监听回车事件 避免2次触发
// 侦听回车事件 EidtText txtSN = (EditText) findViewById(R.id.txtSN); txtSN.setOnEditorActionListener(new ...
- 在EF的code frist下写稳健的权限管理系统:开篇(一)
环境:EF6.0.0.0+Autofac3.5.0.0+MVC4.0+pure6.0+Jquery IDE:vs2012,数据库:vs2008r2 搭建环境如下: 我给它取名字为cactus:仙人球, ...
- python自学笔记一
之前看过一段时间的小甲鱼零基础自学python,b站上有高清免费资源[av4050443],但是作为零基础实在学得艰难,下载了python核心编程pdf,在这里做一些笔记. 虽然使用的是第二版的教材, ...
- void *p 类型,illegal indirection错误
#include<stdio.h>int main(void) { int i=0; int *pint=&i; double d=1.23; doubl ...
- 《高性能javascript》读书笔记:P1减少跨作用域的变量访问
前端优化,有两个意义:1.为了让用户在浏览网页时获得更好的体验 2.降低服务器端的访问压力,节省网络流量. 除了换个好主机连上个千兆网这样的硬件问题,优化部分的实现方式目前也大致两种,一种是页面级别的 ...
- oracle分区表(整理)
Oracle 表分区 早在8.0.5版本中,Oracle就将范围分区技术引入,现在分区功能已经越来越强大,包括支持扩展分区功能.Interval分区.外键分区.模拟列分区.以及分区建议器等.那么,分区 ...
- JavaScript高级程序设计之寄生组合式继承
在继承中常会出现两个问题: 父类的属性变成了子类的原型 构造器指向混乱 寄生组合式继承解决了这样的问题: 属性继承到属性 原型继承到原型 构造器指向明确 // 父类 var Super = funct ...
- R 语言中文乱码问题
R 语言似乎在WINDOWS平台上对中文的支持不是特别好,似乎是3.1.2的一个BUG. 目前我研究出了一个临时解决方案,你可以将代码编写成一个函数,从而在调用的过程中不必如下繁琐: 1. 先将本地语 ...
- 65.OV7725图像倒置180度
采集的图像倒置180度,这跟寄存器的设置有关.寄存器0X32的bit[7]可以变换倒置方向.
- 推荐一款系统软件:Unity tweak tool
功能很多慢慢体会 在软件中心搜索unity tweak tool安装