最近要用全局事件派送,奈何官方大神还在讨论设计模式,所以自己照葫芦画瓢搞了一个
友情提示:本人英语水平很低!逻辑思维很差!设计模式一个都不懂!只是照着我的想法做出来了,所以大神勿喷 
友情提示:本人英语水平很低!逻辑思维很差!设计模式一个都不懂!只是照着我的想法做出来了,所以大神勿喷 
友情提示:本人英语水平很低!逻辑思维很差!设计模式一个都不懂!只是照着我的想法做出来了,所以大神勿喷 
里面很多变量名都是查英语词典拼凑的,所以同学们,大神们,别喷我
重要的事情说三遍



所以可能会有很多问题,欢迎大家反馈,当然你也可以根据自己需要来进行修改,因为简单粗暴,所以没啥技术含量,只不过节省有和我相同需要的同学的时间
目前实现的功能
1.添加监听器(事件名称,回调函数,target)
cc.director.GlobalEvent.addMonitor(eventName, function (event) {
//获取事件传递的数据
var data = event.data;
//事件停止传递
event.stopSend();
}, this);
2.添加一次性监听器(事件名称,回调函数,target) 这个就是只触发一次
cc.director.GlobalEvent.addMonitorOnce(eventName, function (event) {
//获取事件传递的数据
var data = event.data;
//事件停止传递
event.stopSend();
}, this);
3.发送事件(事件名称,事件数据)
cc.director.GlobalEvent.sendEvent(eventName, data);
4.移除监听器(事件名称, target)
cc.director.GlobalEvent.removeMonitor(eventName, target);
5.移除所有监听器
cc.director.GlobalEvent.removeAllMonitor();
6.自定义事件派送顺序(从上倒下或者从下到上,当然这里的顺序是根据监听器添加的顺序做的,因为测试的时候添加监听器都是在onLoad里进行的)
从上到下
从下到上
###7月15日更新:
以前移除监听器是通过事件名把整个事件全部移除了
,现在修改为移除某个target上的事件监听,不会影响其他相同事件的监听和触发
###7月14日更新:
感谢 @_GK 和 @hp134800两位同学的帮助和指点,修复了若干因本人智商导致的错误
比如
比如
以及一些其他小问题
###基本思路
就是在cc.dirctor上添加一个事件管理器(在Canvas的onLoad里进行,这样能保证Canvas的所有子节点以及层级管理器里在Canvas下面的节点都能添加和发送事件),并且如果是在onLoad阶段添加的事件,统一放到start阶段进行派送,因为我这个是根据事件的添加顺序进行派送的,并且派送必须在发生在添加之后,但是有可能派送事件发生在监听事件之前导致事件派送失效,所以为了保证理想的流程,就把onLoad阶段添加的事件统一放到start阶段派送(再次感谢@hp134800同学提供的思路)
简单demo
globalEvent.zip (2.8 MB)
使用方法:
把demo里的GlobalEvent添加为Canvas的第一个组件(或者添加到第一个执行onLoad的节点,就是层级管理器里最最最上面的那个节点),然后设置事件传递的顺序就行了,我不知道creator切换场景的时候会不会销毁事件列表以及监听器的回调函数和target,所以最好是在脚本里添加onDestroy生命周期回调,并且在回调里调用cc.director.GlobalEvent.removeAllMonitor();手动删除所有事件列表,如果onDestroy里不行,就用onDisable

仅供参考和测试,如果使用途中 造成任何损失,概不赔偿

希望大家有啥问题可以给我说,如果我有能力修改,肯定第一次时间修改后上传




,怪我太粗心了
原版这里没有return。于是本来i已经等于length-1了可是在push进去一个新的,导致length又多加了1,所以循环还没跳出。所以就跑进
这里面了。
