MVC设计模式在游戏开发中的应用

一 定义

MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

MVC是一种“前端”的设计模式。

MVC的目的是:希望View和Model分离,当某一方改变时,而另一个方不必随之改变的。

例如,Java EE平台,iOS都是典型的基于MVC思想思想的,那么我们怎么在游戏设计中使用MVC模式呢。

二 MVC架构详解

1 模型Model

一直推荐一种思想:“所有的开发都是以数据位中心”。在MVC中,Model就是我们的数据中心。

Model的主要工作是保存数据,处理数据组织的相关逻辑。

以游戏中的好友系统为例:FriendModel需要保存从服务器请求过来的数据,然后需要提供接口,如返回排序后的结果。

数据还有一个特点就是“唯一性,可重用”,虽然在各个界面的显示各有不同,但这份数据时唯一的。

例如,FriendModel在好友系统中表现为好友的各种信息详情,而在好友PK系统中又以战力的显示为主。

但这对于FriendModel这份数据来说,它是唯一的,只是以不同的逻辑组织,提供不同的接口而已。

2 视图View

View负责与用户的交互。交互又分为两种:输出和输入。

2.1 输出

输出就是将游戏中各种数据,展示出来(包括视图展示,特效,声音等),让玩家能够看清楚,看明白。

例如,上述中的FriendModel中保存的数据,输出就负责将其显示出来,

让玩家看到这个好友的性别是男或者女,而不是1或者0,或是其它什么的。

2.1 输入

输入就是收集玩家的操作,例如玩家点击了一个按钮,或者输入了某些文字。

例如,当玩家点击了一个好友的头像,或者点击了删除好友。

就需要对这些输入进行响应,对数据做出相应的处理。

3 控制器Control

Control就是一个控制中心,关联着Model和View,如果没有了Control,Model和View就是两个完全分离的模块。

当Model改变时,Control就会讲这种改变更新到View上面显示出来。

当View接受到玩家的交互时,会对数据做出相应的处理。

例如,当Model中接受到好友请求时,Control就会控制View,弹出一个提示框,提醒“XXX想要添加你为好友”。

当你点击了接受以后,Control就会发送一条信息给后台,后台返回数据,从而改变Model。

三 组合形式

就拿上面的好友系统来说。

一般会有一个单独的场景SceneFriend,然后有FriendModel,FriendView,最后就是FriendControl。

那么MVC是如何组织到场景中的呢?也有两种做法。

1 将FriendModel,FriendView做为FriendControl的成员变量;

2 将FriendModel,FriendControl做为FriendView的成员变量;

第一种方案比较符合MVC这种模式的设计,讲MV作为C的成员变量,控制起来比较方便。

第二种方案对UI的结构来说,更加适合。因为在Scene中添加一个View,这个是比较合理的。

第一种方案,我们需要将Control的成员变量View,添加到Scene中。

两种各有优劣,看大家的取舍了。iOS采用的是第一种方法。

时间: 2024-10-08 12:38:56

MVC设计模式在游戏开发中的应用的相关文章

MVC模式在游戏开发的应用

原地址: http://www.cocoachina.com/gamedev/2012/1129/5212.html MVC是三个单词的缩写,分别为:模型(Model).视图(View)和控制Controller).MVC是一个设计模式,它强制性地使应用程序的输入.处理和输出分开,将应用程序分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务,关系如图所示: 模型是数据层,视图是表现层,控制器是逻辑层,也对应于程序运行中的数据输入,数据处理,数据输出基本三步骤.事实上,MVC模式开发也适

游戏开发中的银弹

第一次看到"没有银弹"这句话,是在<C++程序设计语言(特别版)>中.这里的银弹我认为是广义的,就是说没有那种万能的模式,只要我们循着这种模式就能开发所有软件.但在游戏开发中是有一些通用部分的,那就是UI还有游戏流程.当然即使是UI和游戏流程,也有N种办法来搞定.比如UI,可以直接写个MonoBehaviour,名字先叫UIRefresh,里面有一堆public成员变量,对应于各个界面,角色信息.背包之类的,使用NGUI或者UGUI的话,UI的零件都是在场景里的,就可以把这

游戏开发中,图片资源的精简

在游戏开发中,包的大小总是与图片资源的大小密切相关,而图片资源中,大多为带有透明度信息的png图像. 那么,如何精简png图片资源呢? 1.图像压缩是一种方法,然而随着压缩率的增大.图片品质也越来越差.(舍弃) 2.我们另辟蹊径,采用png图像拆分.(近乎无损,资源精简) 一.原理:将png图像转化为两张jpeg图像进行存储 pngSplit下载 pngSplit使用说明 二.使用方法: 1.LibGdx中,通过Pixmap使用 // 如工程目录assets/texture/0_1.jpeg下:

游戏开发中的人工智能 复习

游戏开发中的人工智能 复习 (个人复习,一些仅是给自己的复习提示(=w=),转载注明出处:http://blog.csdn.net/hcbbt/article/details/42815479) 配套教材:游戏开发中的人工智能 知识点 移动 Bresenham,视线(略),拦截 // Bresenham if (deltaCol > deltaRow) { fraction = deltaRow * 2 - deltaCol; while (nextCol != endCol) { if (fr

&lt;游戏开发中的人工智能&gt; -- 阅读笔记

到家已经几天了, 休息了一阵, 是时候重新学习知识了. 接下去一段时间, 会啃<游戏开发中的人工智能>这本书, 顺便写写笔记. 马上就大三了, 想想自己选的游戏方向, 现在还蛋疼. 选了一个自己喜欢的方向, 但是确实最忙的一个,这也意味着少时间继续我的iOS学习. 也不知道是对是错. 既然选了,就学吧. 好不,不扯多了.接下去是该系列的笔记.(持续更新) 第一章: 游戏人工智能简介 1. 定性AI与非定性AI 定性行为或其表现是特定的,而且是可预测的,没有不确定性. 非定性行为有某种程度的不确

游戏开发中的一些基本方法

一.              检测对象变化的两种基本方式: 学过<微机原理>的人应该都了解这两种方式 1.       轮询 1) 每帧轮询 2) 定时轮询 按业务需求和性能问题选择 2.       中断(并非硬件中断,而是软件的事件通知方式) 两种模式: 1)       观察者模式 优点:① 扩展性强,事件发起接口不变,只需增加事件类型 ② 只通知对某件事有兴趣的对象,不会浪费性能 ③ 每种事件对应一种回调函数,对于回调函数,事件参数类型是固定的,MouseMove事件的参数类型肯定是

c++实现游戏开发中常用的对象池(含源码)

c++实现游戏开发中常用的对象池(含源码) little_stupid_child2017-01-06上传 对象池的五要素: 1.对象集合 2.未使用对象索引集合 3.已使用对象索引集合 4.当前使用量 5.最大使用量 http://download.csdn.net/download/little_stupid_child/9730912

Cocos2d-x手机游戏开发中-组合动作

动作往往不是单一,而是复杂的组合.我们可以按照一定的次序将上述基本动作组合起来,形成连贯的一套组合动作.组合动作包括以下几类:顺序.并列.有限次数重复.无限次数重复.反动作和动画.动画我们会在下一节介绍,本节我们重点顺序.并列.有限次数重复.无限次数重复和反动 下面我们通过一个实例介绍一下组合动作的使用,这个实例如下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的动作效果,点击Back按钮可以返回到菜单场景. 下面我们再看看具体的程序

游戏开发中的矩阵初探

游戏开发中的矩阵初探 1.矩阵在3d空间中的作用 (1)长方体A想绕(10,3,4)旋转50°且沿着x方向放大2倍且向(9,-1,8)方向平移2个单位,那么经过上面的变换后,新的长方体各个点的坐标是多少呢?应用矩阵可以很轻松的算出答案. (2)知道子坐标系在父坐标系中的位置,可以求出子坐标系中的店在父坐标系中的位置. 2.矩阵的基础知识 矩阵能描述任意线性变换.线性变换保留了直线和平行线,线性变换保留直线的同时,其他的几何性质如长度.角度.面积和体积可能被变换改变了.简单的说,线性变换可能“拉伸