creator节点发自定义事件问题

我没有生搬硬套,你要是觉得不对你可以说,我也能学到新的东西。而且是你先挑起观察者模式的,我想既然你能用术语表达你的观点,那我也用术语来回复。这样大家沟通起来更省力一些。

能解决就好

2赞

// 全局通知 找了一个方法 免节点关系全局通知!!!!! 这个好使
window.Notification = {
_eventMap: [],

on: function(type, callback, target) {
    if (this._eventMap[type] === undefined) {
        this._eventMap[type] = [];
    }
    this._eventMap[type].push({ callback: callback, target: target });
},

emit: function(type, parameter) {
    var array = this._eventMap[type];
    if (array === undefined) return;
    
    for (var i = 0; i < array.length; i++) {
        var element = array[i];
        if (element) element.callback.call(element.target, parameter);
    }
},

off: function(type, callback) {
    var array = this._eventMap[type];
    if (array === undefined) return;

    for (var i = 0; i < array.length; i++) {
        var element = array[i];
        if (element && element.callback === callback) {
            array[i] = undefined;
            break;
        }
    }
},

offType: function(type) {
    this._eventMap[type] = undefined;
},

};

你找的,cc.Node 不就自带了吗,而且比你找的更完善。要是你不想要用全局节点,可以直接用 cc.EventTarget (Node 继承自 EventTarget)。你 window.Notification = new cc.EventTarget() 就可以了。
关键不在于监听器本身,这个用 EventTarget 之类的不难。关键在于别纠结什么同一级别的节点,事件分发,事件广播那些。

好的 没发现文档里有cc.EventTarget!我试试!

文档有介绍这些方法,不过因为 cc.Node 就是继承自 cc.EventTarget,所以文档举例用的是 cc.Node。希望大家能直接创建一个全局节点,或者直接用 cc.find(‘Canvas’) 之类的节点来做