-
Creator 版本:2.4.3
-
目标平台:chrome浏览器
-
重现方式:Test.zip (1023.6 KB)
-
首个报错:
-
之前哪个版本是正常的:
-
手机型号:
-
手机浏览器:
-
编辑器操作系统:
-
重现概率: 100%
解压运行,就可以看到,灰白色的是fgui导出的ui,底下cc logo是cc.prefab,点击白色区域,并没有响应监听,点击白色盖住的logo区域,先相应的是logo,再冒泡到fgui层
Creator 版本:2.4.3
目标平台:chrome浏览器
重现方式:Test.zip (1023.6 KB)
首个报错:
之前哪个版本是正常的:
手机型号:
手机浏览器:
编辑器操作系统:
重现概率: 100%
解压运行,就可以看到,灰白色的是fgui导出的ui,底下cc logo是cc.prefab,点击白色区域,并没有响应监听,点击白色盖住的logo区域,先相应的是logo,再冒泡到fgui层
这是因为fgui的监听机制就是这样的,虽然fgui的监听最后还是使用的node.on,但fgui对中间的过程做了处理。因此在使用的过程中,除非有必要,否则不要轻易直接使用node.on去做监听。
使用gcomp.node.addChild(node)这种方式加入节点,然后做事件监听,100%会出错。因为我们的项目也是使用fgui的,这样的事也遇到过。
有什么解决办法吗,现在项目两种ui共存,ccc的ui是直接对node.on方式
这确实是没想到的,既然选择了fgui为什么还要ccc自己ui,这样很麻烦的。如果必须如此,那么你只能尝试
fgui.Gcomponent的touchable和opaque两个属性了。
因为无论怎么样,都会使用到ccc本身的事件监听,尤其是在战中。这两个属性可以让你控制触摸事件是否能被node.on注册的事件监听到。
尴尬了,我也正好遇到了 fgui 和 ccc事件的同时使用问题,fgui 是全部拦截了的,ccc 的事件无法监听到
你怎么解决这个问题的?
如果你的fgui界面覆盖在了你的注册了ccc事件监听的节点上面,那么Gcomponent.opaque = false; // 开启穿透 下面的node就可以监听到事件了。
或者将fgui组件设置为可穿透空白区域也行。
理解了touchable和opaque两种监听方式是可以互存的。有一个点要注意的是,不能使用GcomponentB.node.addChild(GcomponentA.nodeA),之后再去使用GcomponentA.on的监听方式。
那应该怎么做呢,有点迷惑
我是fgui的点击被ccc拦截了
我的demo是先响应的ccc的触摸,即使ccc在fgui的下层,也是这样,这一点我没找到好的解决办法
你的demo我运行报错,你只上传了一个fgui界面的配置,图集没看到。
具体我天亮了上传一个demo吧。
找了下方案无奈没有,自己跟踪了下源码,只能处理部分共存情况,这里给出思路:
1、creator监听无效的原因:fgui的拦截方式是在fgui的ui根节点加入了一个fgui.InputProcessor 的输入处理组件,就是这个组件拦截了,导致creator自身的监听无效
2、如果要共存,似乎很难做到,比如Creator的按钮A、 FGUI的按钮B、他们都在某个界面显示可见这种情况。如果将fgui的fgui.InputProcessor的enable = false、那么A按钮可以点击,B按钮这个时候不能点击、反之A按钮不能点击、这尼玛是互斥的一个操作啊。其他思路,可以继续研究能不能把fgui.InputProcessor的处理做穿透处理让creator能响应。
3、我自己的需求:场景图片是creator的滑动列表、这个界面是没有fgui的(其实有,我用creator自己做的ui代替了,没办法,因为不能共存在一个界面),当处于creator的界面时候,关闭InputProcessor、当离开这个界面打开InputProcessor,这样算是把我的需求给解决了
我也遇到这个问题了,fgui阻挡了ccc的点击事件,然后我项目中是关闭了多点触摸的,之后我发现开启ccc的多点触摸就能触发ccc的点击事件,关闭多点触摸fgui就会阻挡ccc的点击事件,就很玄学