当有fgui 的groot存在,cocos creator的node就无法点击

只要fgui 的GRoot存在,cocos creator的node就无法监听到任何点击,只要把GRoot.inst.node从canvas上移除掉就正常了,不管我的node放在canvas 下还是GRoot.inst.node下都不行,怎么回事呢,大佬帮忙解答下谢谢
已邀请:

pandajc

赞同来自:

只要把groot的尺寸变小,我的node就能监听到鼠标事件了,像是被groot的无形中的一层迷雾拦截了,在我的node上监听fairygui的事件监听不到,即便没有其他组件挡着

pandajc

赞同来自:

救命啊 !

谷主

赞同来自:

你是不是有全屏的组件,有的话设置为穿透。

freelancer13

赞同来自:

谢邀。最近几年都没有用过Cocos ,楼主一贴把我带回几年前。
我记得这个问题是在creator 3.5的时候出现的,也不知道现在最新的版本有没有什么变化
我的解决方案在之前的帖子里说过了:
 


这在创建UI层级容器的时候,最上层,创建一个专门用于监听全局交互的层:

this._gameMain.interactionEventLayer = fgui.UIPackage.createObject(pakName,comName).asCom;
 
然后这个层专门监听交互事件:

this._gameMain.interactionEventLayer.node.on(Node.EventType.MOUSE_DOWN,this._gameMain.onMouseDown,this._gameMain);


这个方案不雅,但我也没有去寻找更好的解决办法。
注意把这个用于监听交互的组件放在最上层,
盖住全屏幕(fgui适配也行,代码makeFullScreen也行)
并且设置为 可穿透空白区域
然后统一由它提供全局可访问的接口转发所有Input就可以了。
下图是我当时的项目里,游戏开始时的处理fgui容器的命令组
你可以看到注释里写着“交互层”的地方,就是专门创建出来用于转发cocos的Input事件的层级

哎呦.png

 
实际业务中你也不一定需要创建这么多空容器,我当时这样做只是为了偷懒而已。

要回复问题请先登录注册