MVC框架案例(接Mvc游戏注意事项)
2018-07-02 本文已影响74人
Clean_1306
下面介绍一个根据一个简单MVC框架写的小案例来说明一下(即利用Mvc来进行解耦)
0702-01.png图片里面的脚本就是这个案例所写的脚本 ps:Framework文件夹里面的就是这个mvc框架的code;
这里开始说明001Init场景的脚本
====================================================
上面的图就是001场景的场景视图和唯一挂载的脚本“Game”的说明
看到这,有人问了,那这个E_StartUp事件的控制器是什么呢?别急,容我慢慢道来
下面就是E_StartUp事件控制器的所有代码
0702-04.png
对,就是用来注册其他控制器(controller)和模型用的(model),这样就是为了方便管理,至于Game脚本的其他代码,我这里就不上了,先接着往下降,稍后我会上传这个案例给大家的,别急!
下面我们来到案例的主场景“02Main”来看看(至于01Test是什么呢?其实是无关紧要的,只是用来测试别的猜想的,嘿嘿,懒得删了)
0702-05.png其中,Panel物体挂载了一个脚本,PanelScript,这个脚本继承自View(对了,这里说明一下,Const这个脚本就是用来存放所有事件名字的,可别纠结这个是干啥的了哦,staticdata脚本是用来存放一些静态数据的,不过这个案例里面没有用到,所以也可以不用管它)
image.png
这里注意一点 Args里面的脚本全部都是用来传参数用的,用来传输各个事件需要的参数,这里就不多介绍了!
private Button showOrHideBtn; //隐藏显示标题按钮
private Button add; //+按钮
private Button reduce; //-按钮
private Text showText; //显示+-按钮操作后数字的内容
public Text ShowText
{
get { return showText; }
set { showText = value; }
}
private GameObject titleGO; //标题游戏物体
private GameObject rootGO; //所有物体的根节点
void Start()
{
rootGO = GameObject.Find("Canvas");
add = rootGO.transform.Find("Panel/AddNumBtn").GetComponent<Button>();
reduce = rootGO.transform.Find("Panel/ReduceNumBtn").GetComponent<Button>();
showOrHideBtn = rootGO.transform.Find("Panel/ShowOrHideBtn").GetComponent<Button>();
showText= rootGO.transform.Find("Panel/ContentShow").GetComponent<Text>();
titleGO = rootGO.transform.Find("Panel/Title").gameObject;
//添加按钮事件
add.onClick.AddListener(AddNum);
reduce.onClick.AddListener(Reduce);
showOrHideBtn.onClick.AddListener(ShowOrHideTitle);
}
/// <summary>
/// View的对应名字 ps:每个view和model都有自己取得相对应的名字的Name属性
/// </summary>
public override string Name
{
get
{
return Consts.V_PanelScript;
}
}
public void AddNum()
{
NumberArgs na = new NumberArgs()
{
isAdd = true,
number = 1,
};
SendEvent(Consts.C_ChangeNumberController, na);
}
public void Reduce()
{
NumberArgs na = new NumberArgs()
{
isAdd = false,
number = 1,
};
SendEvent(Consts.C_ChangeNumberController, na);
}
//显示或隐藏标题按钮事件
public void TitleBtn()
{
SendEvent(Consts.VE_ShowOrHideTitle);
}
//显示隐藏的处理
void ShowOrHideTitle()//Consts.VE_ShowOrHideTitle 关心的事件名字
{
if (titleGO.activeSelf)
{
titleGO.SetActive(false);
}
else
{
titleGO.SetActive(true);
}
}
//注册关心的事件
public override void RegisterAttentionEvent()
{
AttentionList.Add(Consts.VE_ShowOrHideTitle);
}
//处理view关心的事件
public override void HandleEvent(string name, object data)
{
switch (name)
{
case Consts.VE_ShowOrHideTitle:
ShowOrHideTitle();
break;
}
}
这里就是这个脚本的全部代码,主要用来处理这个案例的按钮的事件,(其实也就只有按钮的事件,别的懒得写了,其实别的功能也差不多了,参考这个就可以了)
至此就差不多了,说明什么的大概先这样吧
下面丢上案例运行的效果图(需要从001Init场景启动哦!!!)
案例效果.gif下面是案例的百度盘连接,为什么百度盘,因为我还没学会用github- -~~~~~