Unity 客户端框架(三):消息机制
2016-08-03 08:24
330 查看
消息机制是基于观察者模式的一种机制,MVC模式被广泛使用,举例说明:当人物被攻击血量减少的时候,我们要通知所有带有血量需要改变的对象,比如:血量条UI等等
为什么要使用:解耦合,降低模块之间的关联性,比如装备面板和属性面板之间的互调等等
本文的消息节点优先排序性能低下,有什么的好的建议可以指教指教
//消息中心
public class EventCenter : Singleton<EventCenter>
{
//消息节点表
public List<EventNode> NodeList = new List<EventNode>();
//消息节点响应事件
public void HanlderEvent(EventType t, params object[] objs)
{
foreach (EventNode e in NodeList)
{
//Debug.Log(e.priority);
e.OnHandler(t, objs);
}
}
}
//事件类型
public enum EventType
{
Command
}
//消息节点
public abstract class EventNode : MonoBehaviour
{
//优先级
protected int priority;
//响应事件
abstract public void OnHandler(EventType t, params object[] objs);
//设置优先级
protected void setPriority(int p)
{
priority = p;
EventCenter.Instance.NodeList.Sort(new EventNode.priorityComparer());
}
//添加至消息中心
protected virtual void Start()
{
EventCenter.Instance.NodeList.Add(this);
}
//从消息中心移除
protected virtual void OnDestroy()
{
if (EventCenter.Instance.NodeList.Contains(this))
{
EventCenter.Instance.NodeList.Remove(this);
}
}
//排序类
public class priorityComparer : IComparer<EventNode>
{
public int Compare(EventNode x, EventNode y)
{
return (x.priority.CompareTo(y.priority));
}
}
}
为什么要使用:解耦合,降低模块之间的关联性,比如装备面板和属性面板之间的互调等等
本文的消息节点优先排序性能低下,有什么的好的建议可以指教指教
//消息中心
public class EventCenter : Singleton<EventCenter>
{
//消息节点表
public List<EventNode> NodeList = new List<EventNode>();
//消息节点响应事件
public void HanlderEvent(EventType t, params object[] objs)
{
foreach (EventNode e in NodeList)
{
//Debug.Log(e.priority);
e.OnHandler(t, objs);
}
}
}
//事件类型
public enum EventType
{
Command
}
//消息节点
public abstract class EventNode : MonoBehaviour
{
//优先级
protected int priority;
//响应事件
abstract public void OnHandler(EventType t, params object[] objs);
//设置优先级
protected void setPriority(int p)
{
priority = p;
EventCenter.Instance.NodeList.Sort(new EventNode.priorityComparer());
}
//添加至消息中心
protected virtual void Start()
{
EventCenter.Instance.NodeList.Add(this);
}
//从消息中心移除
protected virtual void OnDestroy()
{
if (EventCenter.Instance.NodeList.Contains(this))
{
EventCenter.Instance.NodeList.Remove(this);
}
}
//排序类
public class priorityComparer : IComparer<EventNode>
{
public int Compare(EventNode x, EventNode y)
{
return (x.priority.CompareTo(y.priority));
}
}
}
相关文章推荐
- 《Unity 3D游戏客户端基础框架》消息系统
- 用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM——Android端消息处理机制
- Unity 游戏框架搭建 (五) 简易消息机制
- 用.Net打造一个移动客户端(Android/IOS)的服务端框架NHM(五)——Android端消息处理机制
- unity3d socket( unity socket )客户端通信插件-在Unity3d中的简易实现网游客户端通信框架
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答
- (转帖)MFC消息响应机制和MFC程序框架
- Android多媒体框架之流媒体AHandler消息机制----base on jellybean(九)
- IOS开发 消息推送机制和流程以及客户端和服务器代码
- MFC框架原理以及消息运行机制1
- android多媒体框架之流媒体AHandler消息机制----base on jellybean(十)
- 界面框架中的消息机制设计
- android多媒体框架之流媒体AHandler消息机制----base on jellybean(十) .
- unity消息机制实现
- ]android多媒体框架之流媒体AHandler消息机制----base on jellybean(十)
- 一个.net客户端通讯框架的设计(四)---协议解码/编码器工厂以及为其他模块提供消息的dealers/trigers
- Winsocket入门教程三:以Windows消息机制驱动的客户端程序
- android多媒体框架之流媒体AHandler消息机制----base on jellybean(十)
- MFC框架原理以及消息运行机制2