游戏开发要不要用mvc智虎?

MVC模式可以应用在游戏开发中;

MVC是三个词的缩写:模型、视图和控制控制器。MVC是一种设计模式,将应用的输入、处理和输出强行分离,将应用分为模型、视图和控制器三个核心组件。它们各自处理自己的任务,关系如图所示:

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

数据驱动

最近看到一篇博客写的开车法使用心得。这个博客一直强调数据和逻辑的对立,实现的技术是表驱动。这种技术的升华就是数据驱动技术。这种技术应用到游戏上,就是数据驱动游戏的发展。在游戏被开发出来之前,定义以一定的格式定义了它的数据元素,把美术资源和技术分开了。

分层设计

既然面向对象的编程方法被称为主流,那么封装的概念就非常流行。类封装了对象的属性和方法,遵循模块化设计。通过打开相应的接口,实现模块间的通信。模块化设计可以说是程序设计的一大进步,分层设计方法也可以说是模块化设计,只是模块之间使用了一定的列序关系。MVC模式侧重于程序运行过程中不同状态(数据层、逻辑层、表示层)数据的层次化设计。

分层设计有两个关键问题:分层和集成。在设计过程中,如何将整体设计进行分层,如何确定层间的定义规范。当各个层次的模块都开发好了,如何将它们整合起来,实现整体的无缝连接。

MVC模式很好地解决了以上两个问题。按照MVC模式,游戏也可以分为三层:数据层、逻辑层、表示层。其定义如下:

数据层是游戏引擎中各种资源(图片、声音、动画)形成的对象集合。art提供的这些都是最原始的,需要被游戏引擎封装成一组可控的代码。在Cocos2D中,这些原始资源是直接用相应的对象初始化的,比如Sprit、Menu、SimpleAudioEngine等等。这些对象在整个游戏中可以分为数据层。最好的例子就是CocosBuilder生成的ccb文件,由引擎解析。当最原始的资源文件按一定的文件格式组织起来,然后由一个引擎形成一个对象集,这是最理想的生成数据层的方法。在Fishing 2中,很多功能模块都是用这种方法设计的。比如很多语言的本地化。所有字段的翻译都存储在plist文件中,形成一个二维表。当你需要切换语言时,你只需要改变一个键的相对值。逻辑层不需要做任何改变。

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

表示层就像Cocos2D中的Direct和Scene一样,控制游戏的背景,负责及时显示程序中每个数据元素的各种状态。

分层设计广泛应用于软件设计中,如计算机网络中的TCP/IP网络模型(物理层、链路层、网络层、传输层和应用层)和数据库技术(物理数据层、概念数据层和逻辑数据层)。它们的共同特点是层次性,而数据库技术强调数据和逻辑的独立性。

摘要

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

希望能解决你的疑惑!