SRPG游戏开发(十八)第六章 基本框架 - 三 消息事件系统(Message Center)

本文详细介绍了SRPG游戏开发中的消息事件系统,包括事件参数MessageArgs.cs、监听方式(Delegate)、处理者方式(Handler)、控制器方式(Controller)以及发送事件和类型扩展。内容涵盖注册、注销和执行事件的方法,为游戏框架提供灵活的消息传递机制。
摘要由CSDN通过智能技术生成

返回总目录

第六章 基本框架(Framework)



三 消息事件系统(Message Center)

常见的消息事件系统,无外乎注册,注销和执行三个方法。基本都是大同小异。
这里也是相同的,只是把参数分离成单独一个类。
下面介绍几种常见方式,各有利弊,你可以使用1种或几种混用。

namespace DR.Book.SRPG_Dev.Framework
{
    /// <summary>
    /// 消息中心。
    /// 消息中心的方式比较多,你可以挑选一种或几种。
    /// 这里把所有东西都放在了MessageCenter中,
    /// </summary>
    public static class MessageCenter
    {
        // TODO 参数,注册,注销

        /// <summary>
        /// 分发Message的实现
        /// </summary>
        /// <param name="message"></param>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        /// <param name="messageParams"></param>
        private static void ExecuteMessage(string message, object sender, MessageArgs args, params object[] messageParams)
        {
            if (string.IsNullOrEmpty(message))
            {
                Debug.LogError("[MessageCenter] Argument named 'message' is null or empty.");
                return;
            }

            if (sender == null)
            {
                Debug.LogError("[MessageCenter] Argument named 'sender' is null");
                return;
            }

            // TODO 分发并执行消息事件
        }
    }
}

1 事件参数(MessageArgs.cs)

参数可以使用object[]类型,这里单独建出来一个类。
这里只是参数,你也可以将事件名称(name)和发送者(sender)等也放入其中。
还是按需来。

using System;

namespace DR.Book.SRPG_Dev.Framework
{
    public abstract class MessageArgs : EventArgs, IDisposable
    {
        public void Dispose()
        {
            OnDispose();
        }

        protected virtual void OnDispose()
        {

        }
    }
}

2 监听方式(Delegate)

使用监听的方式,常见的是委托模式。这里也是使用委托。

        /// <summary>
        /// Delegate Listener
        /// </summary>
        /// <param name="message"></param>
        /// <param name="sender"></param>
        /// <param name="messageArgs"></param>
        /// <param name="messageParams"></param>
        public delegate void MessageListener(string message, object sender, MessageArgs messageArgs, params object[] messageParams);

        /// <summary>
        /// 注册的Listener.
        /// 你也可以不使用List,直接使用MessageListener.
        /// 注册的时候用 listener += method.
        /// 注销的时候用 listener -= method.
        /// </summary>
        private static readonly Dictionary<string, List<MessageListener>> s_ListenerDict = new Dictionary<string, List<MessageListener>>();

就像注释中写的一样,你可以使用委托的+=-=,也可以使用ListAddRemove来控制监听。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值