一 定义

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

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

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

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

二 MVC架构具体解释

1 模型Model

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

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

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

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

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

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

2 视图View

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

2.1 输入

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

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

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

2.2 输入

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

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

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

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採用的是第一种方法。

MVC架构在游戏开发中的应用的更多相关文章

  1. [Unity游戏开发]向量在游戏开发中的应用(三)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/51088236 在上一篇博客中讲了利用向量点乘在游戏开发中应用的几种情景.本 ...

  2. [Unity游戏开发]向量在游戏开发中的应用(二)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50972976 在上一篇博客中讲了利用向量方向的性质来解决问题.这篇博客将继 ...

  3. [Unity游戏开发]向量在游戏开发中的应用(一)

    本文已同步发表在CSDN:http://blog.csdn.net/wenxin2011/article/details/50810102 向量在游戏开发中是非常实用的,我们在学校学完向量的知识后,只 ...

  4. Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用

    在HTML5游戏开发中,js可以使用Event对象的addEventListener(添加事件监听).dispatchEvent(触发事件)实现监听机制,如果在coocos2d-x中,去实现这种机制该 ...

  5. 二、Cocos2dx概念介绍(游戏开发中不同的坐标系,cocos2dx锚点)

    注:ccp是cocos2dx中的一个宏定义,#define ccp(__X__,__Y__)CCPointMake((float)__X__, (float)__Y__),在此文章中表示坐标信息 1. ...

  6. [C++基金会]位计算 游戏开发中的应用

    定义的位操作:通俗点说,,位计算是计算机操作二进制整数. 无论整数可以用二的方式来表示进度,不同类型的其长度的整数位的是不一样的.INT8要么char靠8个月2 位表示,INT16或者short是由1 ...

  7. 在基于TypeScript的LayaAir HTML5游戏开发中使用AMD

    在基于TypeScript的LayaAir HTML5游戏开发中使用AMD AMD AMD是"Asynchronous Module Definition"的缩写,意思就是&quo ...

  8. 借助AMD来解决HTML5游戏开发中的痛点

    借助AMD来解决HTML5游戏开发中的痛点 游戏开发的痛点 现在,基于国内流行引擎(LayaAir和Egret)和TypeScript的HTML5游戏开发有诸多痛点: 未采用TypeScript编译器 ...

  9. 游戏开发中IIS常见支持MIME类型文件解析

    游戏开发中IIS常见支持MIME类型文件解析 .apkapplication/vnd.android .ipaapplication/vnd.iphone .csbapplication/octet- ...

随机推荐

  1. DB2数据库在线备份还原

    DB2在线备份设置方法: 第一步:开启归档日志 db2 update db cfg for TEST_DB  using logretain on 第二步:重启数据库 第三步:进行一次离线备份 db2 ...

  2. LeetCode728. 自除数

    自除数 是指可以被它包含的每一位数除尽的数. 例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0. 还有,自除数不允许包含 0 . 给定上边 ...

  3. 【HIHOCODER 1604】股票价格II(堆)

    描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 在小Hi的策略中,每天可以在下列三种操作中选取一种: 1.什么也不做: 2.按照当天的价格买进一个单位的 ...

  4. 如何查看Laravel版本号的三种方法

    1.PHP artisan --version 2.vim vendor/laravel/framework/src/Illuminate/Foundation/Application.php 3:可 ...

  5. com.alibaba.fastjson.JSONException: For input string: "8200-12-31"

    https://www.cnblogs.com/mengjinluohua/p/5544987.html https://samebug.io/exceptions/458113/com.alibab ...

  6. POJ 1509 循环同构的最小表示法

    题目大意: 给定一个字符串,可以把一段尾部接到头部,这样找到一个最小的字符串 方案一: 利用循环同构中找最小表示的方法来解决 论文参考http://wenku.baidu.com/view/438ca ...

  7. hdu 分类

    HDU分类 http://www.cnblogs.com/ACMan/archive/2012/05/26/2519550.html#2667329 努力A完.方便自己系统A题 不断更新中...... ...

  8. HDU 6035 (虚树)(统计颜色)

    HDU 6035 Colorful Tree Problem : 给一棵树,每个结点有一种颜色,定义每条路径的权值为这条路径上颜色的种数,询问所有路径(C(n,2)条)的权值之和. Solution ...

  9. msp430入门编程25

    msp430中C语言开发环境搭建 msp430入门学习 msp430入门编程

  10. python学习之-项目开发目录规范

    软件目录结构规范有什么好处: 通过规范化,能够更好的控制软件结构,让程序具有更高的可读性. 项目目录组织结构如下: Foo/ # 项目名 --bin/ # 可执行文件目录 --foo # 可执行程序 ...