cocos 3.8.2 诡异的emit消息BUG,整了一天,什么方法都试了,请教高手给个办法
-
Creator 版本: cocos 3.8.2
-
目标平台: chrome ,firefox反正都是一样的结果
-
重现方式:
两段代码放在两个文件中绑在两个父子节点上,
节点关系》
Node
L tester
Node节点用脚本:parentNode.ts
tester节点用脚本:childNode.ts
========= parentNode.ts ===========
import { _decorator, Component, Node,EventTarget } from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘parentNode’)
export class parentNode extends Component {
onLoad() {
}
start() {
this.node.on('aaa', this.onCustomEvent);
console.log("onstart");
}
update(deltaTime: number) {
}
// 定义事件处理函数
onCustomEvent(event) {
// 处理事件,event.detail 中包含了子节点传递的数据
console.log("oncustomevent():"+JSON.stringify(event));
console.log("oncustomevent():"+event.ok);
}
}
========= childNode.ts =============
import { _decorator, Component, Node,EventTarget} from ‘cc’;
const { ccclass, property } = _decorator;
@ccclass(‘childNode’)
export class childNode extends Component {
start() {
this.node.on('aa', this.onCustomEvent2);
this.node.emit('aa', { "ok":"ok4"});
this.node.emit('aaa', { "ok":"ok5"});
console.log("child onstart");
}
update(deltaTime: number) {
}
onCustomEvent2(event) {
// 处理事件,event.detail 中包含了子节点传递的数据
console.log("oncustomevent():"+JSON.stringify(event));
console.log("oncustomevent():"+event.ok);
}
}
代码说明:
在父节点中加入监听器,监听“aaa"消息
在子节点中加入监听器,监听“aa"消息
然后在子节点中发送2个消息 “aa”,“aaa”
结果:
onload [parentNode.ts14]
onstart [parentNode.ts:21:14]
oncustomevent():{“ok”:“ok4”} [childNode.ts:31:16]
oncustomevent():ok4 [childNode.ts:32:16]
child onstart
说明:
只有子节点中的消息能被子节点中的监听器捕获,输出打印内容
而父节点无法捕获到子节点发出的消息。不管怎么变换写法,也收不到!
- 编辑器操作系统: VSCode
- 重现概率: 100000%