cocos 3.8.2 诡异的emit消息BUG,整了一天,什么方法都试了

用 game就是这样,但是game的on方法被重写了,回调签名是()=>void,不过实际上一样能拿到参数,game换成director一样的,但是这样做好不好我就不知道了

@ccclass('Parent')
export class Parent extends Component {
    protected onLoad(): void {
        //@ts-ignore
        game.on("MyEvent",(arg)=>{
            console.log("收到MyEvent事件:" + arg);
        }, this);
    }

    start() {
        game.emit("MyEvent", "事件参数")
    }

    protected onDestroy(): void {
        game.targetOff(this);
    }
}

image

1赞

node.emit发送事件又不冒泡,谁发送谁接收,
你父节点监听aaa,子节点发送aaa,两者毫无关联
你的需求可以用EventBus模型实现,
简单点处理就用director或者game节点去收发事件也行

1赞

这个最好用一个全局变量 发送 接收 !

1赞

参考这个

这个设置成全局变量,
eventTarget = new EventTarget();

在需要的场景的代码中用

这个做监听,还得记得
在onDestroy方法中 撤销监听
eventTarget.off

试试吧 骚年!

为什么想不开用自带的事件广播系统,自己用观察者模式实现个事件通知模块不香么。所有引擎都能用。 :joy:

引擎有为啥不用引擎的 一般全局事件用eventTarget就够用了

1赞

习惯问题吧,以前用unity也是自己写的,几行代码代码就搞定,不容易踩坑,而且知道底层加定制化功能也方便。

1赞

帮大忙了, 谢谢.
3.x的确实让人疑惑. 用习惯了this.node.emit后发现跨节点怎么都监听不到, 同一个节点能监听.
那这种全局单例才是最优解了.