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