EventDispatcher

事件分发类,提供事件注册、移除、触发功能

采用delegate、dictionary实现

支持自定义事件。事件采用字符串方式标识

支持 0,1,2,3,4 等5种不同参数个数的回调函数

// 路由器字典,按照事件类型存储,可添加多个事件监听

private Dictionary<string, Delegate> m_theRouter = new Dictionary<string, Delegate>();

// 永久注册的事件列表,存储事件类型

private List<string> m_permanentEvents = new List<string>();

// 标记为永久注册事件
public void MarkAsPermanent(string eventType){}

// 判断是否已经包含事件

public bool ContainsEvent(string eventType){}

// 清除非永久性注册的事件

public void Cleanup(){}

// 增加监听器之前的检查,处理事件类型,检查参数等

private void OnListenerAdding(string eventType, Delegate listenerBeingAdded){}

// 移除监听器之前的检查,删掉事件类型

private bool OnListenerRemoving(string eventType, Delegate listenerBeingRemoved){}

事件分发类,提供事件注册、移除、触发功能

采用delegate、dictionary实现

支持自定义事件。事件采用字符串方式标识

支持 0,1,2,3,4 等5种不同参数个数的回调函数

// 路由器字典,按照事件类型存储,可添加多个事件监听。 - by muxiaomo

private Dictionary<string, Delegate> m_theRouter = new Dictionary<string, Delegate>();

// 永久注册的事件列表,存储事件类型

private List<string> m_permanentEvents = new List<string>();

// 判断是否已经包含事件

public bool ContainsEvent(string eventType){}

// 清除非永久性注册的事件

public void Cleanup(){}

// 增加监听器之前的检查,处理事件类型,检查参数等

private void OnListenerAdding(string eventType, Delegate listenerBeingAdded){}

// 移除监听器之前的检查,删掉事件类型

private bool OnListenerRemoving(string eventType, Delegate listenerBeingRemoved){}

// 增加监听器,支持0,1,2,3,4等5种不同参数个数的回调函数
public void AddEventListener(string eventType, Action handler){}
public void AddEventListener<T>(string eventType, Action<T> handler) { }
public void AddEventListener<T, U>(string eventType, Action<T, U> handler) { }
public void AddEventListener<T, U, V>(string eventType, Action<T, U, V> handler) { }
public void AddEventListener<T, U, V, W>(string eventType, Action<T, U, V, W> handler) { }

// 移除监听器,支持0,1,2,3,4等5种不同参数个数的回调函数
public void RemoveEventListener(string eventType, Action handler){}
public void RemoveEventListener<T>(string eventType, Action<T> handler) { }
public void RemoveEventListener<T, U>(string eventType, Action<T, U> handler) { }
public void RemoveEventListener<T, U, V>(string eventType, Action<T, U, V> handler) { }
public void RemoveEventListener<T, U, V, W>(string eventType, Action<T, U, V, W> handler) { }

//触发事件,支持0,1,2,3,4等5种不同参数个数
public void TriggerEvent(string eventType){}
public void TriggerEvent<T>(string eventType, T arg1) { }
public void TriggerEvent<T, U>(string eventType, T arg1, U arg2) { }
public void TriggerEvent<T, U, V>(string eventType, T arg1, U arg2, V arg3) { }
public void TriggerEvent<T, U, V, W>(string eventType, T arg1, U arg2, V arg3, W arg4) { }

时间: 2024-10-11 01:58:10

EventDispatcher的相关文章

cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)

源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结构 1.1 结构 不详吐槽太多,也不贴图了.贴图要审核好久好久好久好久. 从小到大,先来看下Event的结构. 1.Event--------EventTouch,EventCustom,EventMouse,EventKeyboard,EventFocus,EventAcceleration 当中

JS 事件派发器EventDispatcher

在Java和AS中经常用到EventDispatcher,写了一个JS版本的. addListener :添加事件监听器 removeListener:移除事件监听器 dispatchEvent:派发事件   /** * Created by taozh on 2015/7/11. * Mail:[email protected] */ var z = {}; z.EventDispatcher = function () { this.__z_e_listeners = {}; }; z.Ev

cocos2d-x 源码分析 : EventDispatcher、EventListener、Event 源码分析 (新触摸机制,新的NotificationCenter机制)

源码版本来自3.x,转载请注明 cocos2d-x 源码分析总目录 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结构 1.1 结构 不详吐槽太多,也不贴图了,贴图要审核好久好久好久好久. 从小到大,先来看下Event的结构. 1.Event--------EventTouch,EventCustom,EventMouse,EventKeyboard,EventFocus,EventAcceleration 其中,Eve

Cocos2d-x 3.2 EventDispatcher事件分发机制

本文转载于Cocos2d-x v3.2学习笔记中的(九)事件分发机制(EventDispatcher) EventDispatcher事件分发机制先创建事件,注册到事件管理中心_eventDispatcher,通过发布事件得到响应进行回调,完成事件流. 有五种不同的事件机制: EventListenerTouch 响应触控事件 EventListenerKeyboard 响应键盘事件 EventListenerAcceleration 响应加速器事件 EventListenMouse 响应鼠标事

Symfony2 EventDispatcher组件

一个插件系统中,A插件在不影响其它插件的前提下,添加新的方法,或者在一个方法运行前做一些准备工作,通过继承来实现扩展是很不容易的,由于插件之间的关联关系,A插件的改变也会使得关联的插件被动的修改. Symfony2的EventDispatcher组件实现了中介者(mediator)模式,实现了插件之间的解耦和关联的关系. 举个栗子,在HttpKernel组件中,一旦Response被创建了,在Response发送给客户端的时候,允许系统的其它模块修改它是很有必要和很有用的(例如:在头部添加缓存字

three.js 源码注释(二十一)Core/EventDispatcher.js

商域无疆 (http://blog.csdn.net/omni360/) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:商域无疆 -  本博客专注于 敏捷开发及移动和物联设备研究:数据可视化.GOLANG.Html5.WEBGL.THREE.JS,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 俺也是刚开始学,好多地儿肯定不对还请见谅. 以下代码是THREE.JS 源码文件中Core/EventDispatcher.js文件的注释. 更多更新在 : https

【Unity游戏开发】用C#和Lua实现Unity中的事件分发机制EventDispatcher

一.简介 最近马三换了一家大公司工作,公司制度规范了一些,因此平时的业余时间多了不少.但是人却懒了下来,最近这一个月都没怎么研究新技术,博客写得也是拖拖拉拉,周六周天就躺尸在家看帖子.看小说,要么就是吃鸡,唉!真是罪过罪过.希望能从这篇博客开始有些改善吧,尽量少玩耍,还是多学习吧~ 好了扯得有点远了,来说说我们今天博客的主题——“用C#和Lua实现Unity中的事件分发机制”,事件分发机制或者叫事件监听派发系统,在每个游戏框架中都是不可或缺的一个模块.我们可以用它来解耦,监听网络消息,或者做一些

cocos2d-x 3.x之触摸事件

Layer类的一个重要作用就是接受输入事件,它封装了触摸输入的处理接口.一般情况下,我们可以通过setTouchEnabled方法来开启或关闭接收触摸输入.事实上并不是只有Layer才支持接收触摸事件,任何一个游戏元素都可以接收事件,只不过Layer提供了现成的支持. 我们只需通过创建一个事件监听器用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher中,所有事件监听器由这个分发器统一管理,即可完成事件响应. 为一个精灵添加触摸事件的四个步骤 1.创建一个精灵 2.创建一

Mac安装composer安装Yii2项目

[注释:]本人原创,如需转载请注明来源链接! 通过安装Composer方式安装Yii 如果还没有安装 Composer,你可以按 getcomposer.org 中的方法安装. 在 Linux 和 Mac OS X 中,你可以运行如下命令: curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer 步骤: 一.打开终端 二.安装composer: 1.终端输入:curl -s