c#游戏事件系统
2017-08-17 17:48
253 查看
/// <summary> /// 游戏事件分发器,用于监听、广播游戏事件。 /// </summary> public static class EventDispatcher { public delegate void EventListener(Dictionary<string, object> args); /// <summary> /// 广播指定事件。 /// </summary> /// <param name="eventId">事件编号</param> /// <param name="args">事件参数</param> public static void Dispatch(int eventId, Dictionary<string, object> args = null) { var luaListeners = getLuaEventListener(eventId); for (var i = 0; i < luaListeners.Count; i++) { var listener = luaListeners[i]; listener.Function.Call(listener.Self, args); } var listeners = getEventListeners(eventId); for (var i = 0; i < listeners.Count; i++) listeners[i].Invoke(args); } /// <summary> /// 添加对指定事件的监听。 /// </summary> /// <param name="eventId">事件编号</param> /// <param name="listener">回调委托</param> [NoToLua] public static void AddListener(int eventId, EventListener listener) { var listeners = getEventListeners(eventId); listeners.Add(listener); } /// <summary> /// 移除对指定事件的监听。 /// </summary> /// <param name="eventId">事件编号</param> /// <param name="listenerToBeRemoved">回调委托</param> [NoToLua] public static void RemoveListener(int eventId, EventListener listenerToBeRemoved) { var listeners = getEventListeners(eventId); for (var i = 0; i < listeners.Count; i++) { var listener = listeners[i]; if (listener == listenerToBeRemoved) { listeners.RemoveAt(i); break; } } } /// <summary> /// 清除所有的事件监听器。 /// </summary> public static void Clear() { _listeners.Clear(); _luaListeners.Clear(); } private static List<EventListener> getEventListeners(int eventId) { List<EventListener> ret; if (_listeners.TryGetValue(eventId, out ret)) return ret; ret = new List<EventListener>(); _listeners.Add(eventId, ret); return ret; } private static readonly Dictionary<int, List<EventListener>> _listeners = new Dictionary<int, List<EventListener>>(); }
相关文章推荐
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十七)战斗前夜之构建动态障碍物系统
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十八) 经典式属性设计及完美的物理攻击系统
- c#中事件Event声明和触发,以及自定义事件委托和系统委托EventHandler
- 一个基于observer模式的游戏事件分发系统
- u3d5第一人称射击游戏(C#脚本)完整版并在iOS9.3系统上真机运行
- C#注销或系统关机等事件
- 用C#编程删除系统自带游戏
- 【转】【UNITY3D 游戏开发之七】C# 中的委托、事件、匿名函数、Lambda 表达式
- c#部分---网吧充值系统;简易的闹钟;出租车计费;简单计算器;对战游戏;等额本金法计算贷款还款利息等;随机生成10个不重复的50以内的整数;推箱子;
- 用C#编程删除系统自带游戏
- 【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher
- cocos2d-x游戏引擎核心(3.x)----事件分发机制之事件从(android,ios,desktop)系统传到cocos2dx的过程浅析
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十八) 经典式属性设计及完美的物理攻击系统
- Silverlight C# 游戏开发:草动系统(一)简单的草动
- 一个基于observer模式的游戏事件分发系统
- 一个基于observer模式的游戏事件分发系统
- 在C#中接收系统屏幕锁定和解锁的事件
- c#读写系统事件日志
- c#:猜数字游戏!系统随机给出一个0至99(包括0和99)之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示后,最终推出答案
- 用C#编程删除系统自带游戏