框架是很重要的知识,没有框架的项目就像在没有原画下在拼图,盲目低效容易混乱。
网上已经有很多关于MVC框架的文章,我也没必要从头到尾说一遍,从其他文章可以了解MVC框架。游戏是一个很复杂的设计,MVC并不能满足游戏的设计做到完全层次分明。我曾经在某个博客中看过一个框架MVCS,跟MVC很像,只是多了一个S,S代表的是数据,C从S中获得数据从而做到数据层和控制层的分离。
M: Model 数据模型 V: VIew 肉眼看到的显示
C:Controller 功能逻辑都在这 S: Stores 数据存储(本地的,网络的数据的读取)
他们之间的调用情况如图
具体例子:(里面用到的Mediator是中介者模式之后会讲)
Model
public class PlayerModel {
public int hp{get;set;}
public int mp { get; set; }
public int attack{get;set;}
}
View:
//UI层的Viewpublic class PlayerInfoPanel : MonoBehaviour
{
public Text mpText;
void Start () {
Mediator.RegisterEventHandler("PlyerInfoPanel_Update", this, UpdatePanel);
}
private void UpdatePanel(Message message) {
if (message["mp"]!= null)
{
mpText.text = ((int)message["mp"]).ToString();
}
}
}/场景层的View
public class PlayerView {
public void PlayAttackAnimation() { }
}Store:
public class PlayerStores :MonoBehaviour{
public static PlayerStores Instance;
private PlayerModel _modelData;
private int levelNow;
private int levelGetData;
void Awake() {
Instance = this;
}
public PlayerModel GetPlayerData()
{
//举个例子而已,尽量减少玩家和服务器的数据交流
if (levelGetData < levelNow)
{
//从网络或本地获取数据.
_modelData = new PlayerModel();
//更新数据
return _modelData;
}
else
{
//返回缓存数据
return _modelData;
}
}
}Controller:
public class PlayerController :MonoBehaviour{
public PlayerView playerView;
public PlayerModel playerData;
public void Attack() {
//一系列控制后
playerView.PlayAttackAnimation();
playerData.mp -= 10;
Mediator.Send("PlyerInfoPanel_Update", "mp", playerData.mp.ToString()); //与另一模块交流
}
public void LevelUp() {
PlayerModel model = PlayerStores.Instance.GetPlayerData();
//下面和Attack操作一样
}
}
本文介绍了游戏开发中的一种框架——MVCS,并通过具体代码示例详细解释了Model(数据模型)、View(视图)、Controller(控制器)及Stores(数据存储)各部分的功能及其相互作用。这种框架有助于实现游戏开发中的数据层与控制层分离。
3762

被折叠的 条评论
为什么被折叠?



