最近做的农场游戏,一些界面变动(金币变动,或者一些操作等)都是通过查找节点得到挂载的脚本组件来控制界面的内容显示,而creator的监听和发射事件都是基于节点的.突发奇想会不会有全局的观察者模式来处理事件的监听和发射.
于是在论坛收到了jare回答的问题.根据回答就尝试了一下.于是有了本文的介绍,以便后来者方便使用.
首先把NotificationCenter做成全局的js脚本.这样就支持全局调用了.
在用到的地方之间require这个脚本文件,然后使用on或emit即可.
1 | var NotificationCenter = new cc.EventTarget(); |
2 | /* |
3 | //说明xxxxxxxx |
4 | */ |
5 | module.exports = NotificationCenter; |
/**
* 支持emit on off事件
* on监听事件
* //监听notification事件
* NotificationCenter.on('notification', function (event) {
* console.log(event.detail.msg);//这里的msg为emit事件派发数据的key
* console.log(event.detail.body);//这里的body为emit事件派发数据的key
* console.log(event.detail.test);//这里的test为emit事件派发数据的key
* }.bind(this));
*
* emit派发事件
* //发射notification事件
* NotificationCenter.emit('notification',{
* msg: 'Hello, this is Cocos Creator',//这里的msg为on事件监听数据的key
* body:"你好啊",//这里的body为on事件监听数据的key
* test:12,//这里的test为on事件监听数据的key
*
* //关闭notification事件
* NotificationCenter.off('notification');
*
* 说明:此处把NotificationCenter设置为全局的数据,用到的地方需要require本文件
* 例如:var NotificationCenter = require("NotificationCenter");
* 需要监听xxxxx事件的可以在start或onLoad函数里使用on进行监听.
* 需要发送事件的时候直接调用emit事件,第二个参数可以带数据
*
* 注意:在使用本事件的js脚本挂载的节点必须是可见的(node.active = true).否则事件是无法on监听的.
*/
大概就是这个样子,这里只是简单的使用,还有优化的地方.这里不过感觉用起来不是很顺手,因为引用该文件的脚本所在节点如果不显示则无法正确的执行.
大家优化后可以分享出来到论坛https://www.27ki.com/forum-81-1.html by:闭眼就天黑