为什么给Node注册了点击事件,一定要get child再去注册才会被响应?

我创建了一个prefab,在其中给两个节点 leaf0, leaf1添加了点击事件,为什么总是不响应?

哪里不对??

参见下面截图:

thisleaf0.on(cc.Node.EventType.TOUCH_END,this.onLeafClick.bind(this),this),多看看文档有好处

thisleaf0.on(cc.Node.EventType.TOUCH_END,(event)=>{
cc.log(‘event’:event);
},this)

thisleaf0.on(cc.Node.EventType.TOUCH_END,this.onLeafClick.bind(this),this);
bind(this)没必要
这样
thisleaf0.on(cc.Node.EventType.TOUCH_END,this.onLeafClick.bind(this));
或者
thisleaf0.on(cc.Node.EventType.TOUCH_END,this.onLeafClick.bind,this);

楼上的二位,你们的方法我都试过了,都不行啊。。。

因为你的leaf0长宽为0吧,给设置个width,height就好了

不是啊。leaf0 里面是一个叶子资源和一个label文本(“a”)。我截一个大一点的图片:

兄弟,我竟然神奇的发现:

let leaf = this.leaf0.getChildByName(“leaf”);//这里获取了子对象
leaf.once(cc.Node.EventType.TOUCH_END,this.onLeafClick,this);

这样竟然就可以了。。。。我的天~这是为啥?初学者很难发现啊。是不是引擎的bug?

就是因为leaf0的长宽为0啊,你事件加在leaf0上,引擎判断的是leaf0的长宽。子节点leaf有图片,长宽不为0,加事件就好使了。

1赞

好吧,原来是这样的原理。我的理解是:如果不显示设置其宽高,作为父容器,那么它的宽高应该取决于所有孩子的叠加宽高啊。。看来我错了,不过,非常感谢你的帮助。