Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(61评价)
价格: 2208.00元
关于MVC框架
仓央嘉措__发起了问答2018-07-05
2
回复
648
浏览

关于萌熊跑酷的MVC框架

我想问问控制器发事件,就是在C#中,我发送事件了,他是怎么执行的,百度的框架图中有一条线是从模型指向视图,这是发送事件,也就是说我从模型发送事件给视图,视图接收后怎么执行?可以的话希望老师能列举具体的事件说明一下,被发送的事件,怎么执行,发送的是什么,还有为什么每个控制器只对应一个事件(因为一些原因目前只是把萌熊跑酷的框架那部分学完了,没有继续往下看,现在很纠结框架的核心思想)

 

思绪很乱,上面基本可以算是一个问题吧,还有就是我陈述一下目前我对MVC框架的了解,希望老师看一下对错

视图的功能就是能做到一个完整的游戏进程,通过框架拿到自己想要的模型,进而根据已有模型来达到改变的状态

控制器就是执行事件,能改视图和模型

模型就是存游戏数据的,控制器改变了模型就改视图

 

老师看一下揪下错,谢谢

 

所有回复
  • 老师_Ivy 2018-07-05

    问题1:发送事件决定谁来执行主要看MVC这个函数

     //发送事件
        public static void SendEvent(string eventName,object data = null) {

            //controller执行 
            if (CommandMap.ContainsKey(eventName)) {
                Type t = CommandMap[eventName];
                //控制器生成
                Controller c = Activator.CreateInstance(t) as Controller;
                c.Execute(data );
            }

            //view处理
            foreach (var v in Views.Values) {
                    if (v.AttentionList.Contains(eventName)) {
                        //执行
                        v.HandleEvent(eventName,data);
                    }
            }


        }

    一旦确定视图的AttentionList里边有这个关心事件,就会执行HandleEvent(eventName,data) 这个函数。
    举个例子,在UIBoard里边,HandleEvent可以处理很多对应的事件。

    public override void HandleEvent(string name, object data)
        {
            switch (name)
            {
                case Consts.E_UpdataDis:
                    DistanceArgs e1 = data as DistanceArgs;
                    Distance = e1.distance;
                    break;
                case Consts.E_UpdateCoin:
                    CoinArgs e2 = data as CoinArgs;
                    Coin += e2.coin;
                    break;
                case Consts.E_HitAddTime:
                    Times += 20;
                    break;
                case Consts.E_HitGoalTrigger:
                    ShowGoalClick();
                    break;
                case Consts.E_ShootGoal:
                    m_GoalCount += 1;
                    print("进了"+m_GoalCount + "球");
                    break;
            }
        }

    当要更新金币UI显示时,接收到的事件是E_UpdateCoin,

    所以只要执行 
    CoinArgs e2 = data as CoinArgs;
    Coin += e2.coin;

    这个就好

     

     

    问题2:基本对,视图不太准确。

    Model,主要是数据、业务逻辑和业务规则。相对而言,这是MVC中比较稳定的部分,一般成品后不会改变。 

    View是指视图,也就是呈现给用户的一个界面,是model的具体表现形式,也是收集用户输入的地方。 

    Contorller指的是控制器,主要负责与model和view打交道。它决定使用哪些Model,对Model执行什么操作,为视图准备哪些数据,是MVC中沟通的桥梁。

                    

    还有-4条回复,点击查看
    你还没有登录,请先登录注册
发表回复
你还没有登录,请先 登录或 注册!