24.PureMVC的角色面板View和Mediator

24.PureMVC框架-角色面板View界面层和Mediator中介者模式


24.1 知识点

创建NewRoleView脚本代表角色面板界面层。定义控件变量并按照MVC的思想提供更新方法。如果是用MVP的思想就在不耦合数据对象就行。

public class NewRoleView : MonoBehaviour
{
    // 找控件
    public Button btnClose;
    public Button btnLevUp;
    
    public Text txtLev;
    public Text txtHp;
    public Text txtAtk;
    public Text txtDef;
    public Text txtCrit;
    public Text txtMiss;
    public Text txtLuck;
    
    // 提供面板更新的相关方法给外部
    public void UpdateInfo(PlayerDataObj data)
    {
        txtLev.text = "LV." + data.lev;
        txtHp.text = data.hp.ToString();
        txtAtk.text = data.atk.ToString();
        txtDef.text = data.def.ToString();
        txtCrit.text = data.crit.ToString();
        txtMiss.text = data.miss.ToString();
        txtLuck.text = data.luck.ToString();
    }
}

创建角色面板中介者脚本继承Mediator,定义名字并重写构造函数

// 套路写法
// 继承PureMVC中的Mediator脚本 
public class NewRoleViewMediator : Mediator
{
    public static new string NAME = "NewRoleViewMediator";
    
    // 写构造函数
    public NewRoleViewMediator() : base(NAME)
    {
    
    }
}

重写监听通知方法,返回更新事件字符串数组

// 重写监听通知的方法
public override string[] ListNotificationInterests()
{
    return new string[] {
        PureNotification.UPDATE_PLAYER_INFO,
        // 以后你还关心别的通知 就在这后面通过逗号连接 加起来就行了
    };
}

重写处理通知的方法。判断什么事件处理什么回调

// 重写处理通知的方法
public override void HandleNotification(INotification notification)
{
    // INotification 对象 里面包含两个我们来说重要的参数
    // 1. 通知名 我们根据这个名字来做对应的处理
    // 2. 通知包含的信息 
    switch (notification.Name)
    {
        case PureNotification.UPDATE_PLAYER_INFO:
            // 玩家数据更新逻辑处理
            if (ViewComponent != null)
            {
                (ViewComponent as NewRoleView).UpdateInfo(notification.Body as PlayerDataObj);
            }
            break;
    }
}

24.2 知识点代码

NewRoleView

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewRoleView : MonoBehaviour
{
    //1.找控件
    public Button btnClose;
    public Button btnLevUp;

    public Text txtLev;
    public Text txtHp;
    public Text txtAtk;
    public Text txtDef;
    public Text txtCrit;
    public Text txtMiss;
    public Text txtLuck;


    //2.提供面板更新的相关方法给外部
    public void UpdateInfo(PlayerDataObj data)
    {
        txtLev.text = "LV." + data.lev;
        txtHp.text = data.hp.ToString();
        txtAtk.text = data.atk.ToString();
        txtDef.text = data.def.ToString();
        txtCrit.text = data.crit.ToString();
        txtMiss.text = data.miss.ToString();
        txtLuck.text = data.luck.ToString();
    }
}

NewRoleViewMediator

using PureMVC.Interfaces;
using PureMVC.Patterns.Mediator;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//套路写法
//1.继承PureMVC中的Mediator脚本 
public class NewRoleViewMediator : Mediator
{
    public static new string NAME = "NewRoleViewMediator";


    //2.写构造函数
    public NewRoleViewMediator():base(NAME)
    {

    }

    //3.重写监听通知的方法
    public override string[] ListNotificationInterests()
    {
        return new string[] {
            PureNotification.UPDATE_PLAYER_INFO,
            //以后你还关心别的通知 就在这后面通过逗号连接 加起来就行了
        };
    }


    //4.重写处理通知的方法
    public override void HandleNotification(INotification notification)
    {
        //INotification 对象 里面包含两个队我们来说 重要的参数
        //1.通知名 我们根据这个名字 来做对应的处理
        //2.通知包含的信息 
        switch (notification.Name)
        {
            case PureNotification.UPDATE_PLAYER_INFO:
                //玩家数据更新 逻辑处理
                if(ViewComponent != null)
                {
                    (ViewComponent as NewRoleView).UpdateInfo(notification.Body as PlayerDataObj);
                }
                break;
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏