学习笔记三:基础的UI_MVC(简单版)

MVC:数据模型_Model、视图_View、控制器_Controller
百度百科搜索

在这里插入图片描述
//控制器 --逻辑相关
用户动作反应—切换视图

public class HeroController
{
    #region 单例
    public static readonly HeroController _controller = new HeroController();
    private HeroController()
    {
        _model = HeroModel._model;
       
    }
    #endregion


    #region MVC_Model
    private HeroModel _model;

    #endregion
    #region UI Event
    /// <summary>
    /// 初始化数据
    /// </summary>
    public  void DataInit()
    {
        _model.HeroExperience = 0;
        _model.HeroLevel = 1;
        _model.CornCount = 0;
        _model.DiamondConunt = 0;
    }

    public void OnAddExperienceButtonClick()
    {
        _model.HeroExperience += 100;
        while (_model.HeroExperience  >= _model .HeroLevel *10)
        {
            //升级后的剩余经验
            _model.HeroExperience = _model.HeroExperience  - _model.HeroLevel * 10;
            //升级
            _model.HeroLevel += 1;
            //增加金币
            _model.CornCount += 100;
            //增加钻石
            if (_model .HeroLevel%3==0)     //每升三级增加钻石
            {
                _model.DiamondConunt += 10;
            }
        }
        //跳出循环代表升级成功,显示升级后的经验  ----重新设置经验总值
        _model.HeroExperience = _model.HeroExperience;
    }
    #endregion

}

//视图

 通过用户交互触发事件
 只负责视图显示在UI,给事件绑定变值回调,更新数据到显示UI,绑定控制器中的按钮事件
public class HeroView:MonoBehaviour
{
    #region MVC_COntroller
    private HeroController _controller;
    private HeroModel _model;
    #endregion



    #region Element
    private RectTransform experienceImgRect;
    private Text experienceText;
    private Text levelText;
    private Text cornText;
    private Text diamondText;
    private Button addExperienceBtn;
    #endregion

    #region Mono CallBack
    private void Awake()
    {
        experienceImgRect = transform.Find(UIConst.EXPERIENCE_IMG_PATH).GetComponent<RectTransform>();
        experienceText = transform.Find(UIConst.EXPERIENCE_TEXT_PATH).GetComponent<Text>();
        levelText = transform.Find(UIConst.LEVEL_TEXT_PATH).GetComponent<Text>();
        cornText = transform.Find(UIConst.CORN_TEXT_PATH).GetComponent<Text>();
        diamondText = transform.Find(UIConst.DIAMOND_TEXT_PATH).GetComponent<Text>();
        addExperienceBtn = transform.Find(UIConst.ADDEXPERINCE_BUTTON_PATH).GetComponent<Button>();

        _controller = HeroController._controller;
        _model = HeroModel._model;
    }

    private void Start()
    {
        //绑定控制器中的按钮事件
        addExperienceBtn.onClick.AddListener(_controller.OnAddExperienceButtonClick);
        //给数据模型绑定变值回调
        _model.OnHeroExperienceValueChange = SynchronizationExperience;
        _model.OnHeroLevelValueChange = SynchronizationLevel;
        _model.OnCornCountValueChange = SynchronizationCornCount; 
        _model.OnDiamondCountValueChange = SynchronizationDiamondCount;
        //数据初始化
        _controller.DataInit();
        
    }

    //同步数据模型,更新视图数据
    private void SynchronizationExperience(float val)
    {
        experienceText.text = val.ToString()+"/"+(_model .HeroLevel*10).ToString ();

        //TOBO:更新经验条显示比例
    }
    private void SynchronizationLevel(int val)
    {
        levelText.text = val.ToString();
    }
    private void SynchronizationCornCount(int val)
    {
        cornText.text = val.ToString();
    }
    private void SynchronizationDiamondCount(int val)
    {
        diamondText.text = val.ToString();
    }
	//UI  Model  数据模型
	存储游戏的一些数据,提供数据访问器
	(数据值发生改变后回调事件(具体事件内容不知道))
	注意:值发生变化的时候,发生的事件和同步视图
public class HeroModel
{
    public static readonly HeroModel _model = new HeroModel();
    private HeroModel() { }

    #region OnValueChangeEvent(变值回调事件)
    public System.Action<float> OnHeroExperienceValueChange;
    public System.Action<int> OnHeroLevelValueChange;
    public System.Action<int> OnCornCountValueChange;
    public System.Action<int> OnDiamondCountValueChange;
    #endregion


    #region Field字段
    //英雄经验
    private float heroExperience;
    //英雄等级
    private int heroLevel;
    //金币数量
    private int cornCount;
    //钻石数量
    private int diamondConunt;
    #endregion

    #region 字段属性 

    public float HeroExperience
    {
        get
        {
            return heroExperience;
        }

        set
        {
            heroExperience = value;
            if (OnHeroExperienceValueChange != null)
            {
                //当英雄经验发生改变的时候调用事件
                OnHeroExperienceValueChange(heroExperience);
            }
  
        }
    }

    public int HeroLevel
    {
        get
        {
            return heroLevel;
        }

        set
        {
            heroLevel = value;
            if (OnHeroLevelValueChange != null)
            {
                //当等级发生改变的时候调用事件
                OnHeroLevelValueChange(heroLevel);
            }
        }
    }

    public int CornCount
    {
        get
        {
            return cornCount;
        }

        set
        {
            cornCount = value;
            if (OnCornCountValueChange != null)
            {
                OnCornCountValueChange(cornCount);
            }
        }
    }

    public int DiamondConunt
    {
        get
        {
            return diamondConunt;
        }

        set
        {
            diamondConunt = value;
            if (OnDiamondCountValueChange != null)
            {
                OnDiamondCountValueChange(diamondConunt);
            }
        }
    }
    #endregion

}

//

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值