cocos2d-x 3.x 关于cocostudio的UI将事件吃掉,场景Layer无法响应手势的问题解决方法
2014-08-02 20:21
731 查看
cocostudio的UI编辑器真是个好东西,用的熟真是可以节省很多开发时间,把客户端程序员从无尽的需求变化中解脱出来~
最近使用cocostudio的UI编辑器,遇到了一个问题,就是希望在场景当中注册Touch事件实现手势功能的同时,还能够使用cocostudio的UI编辑器导出的Layout等界面,
之前在做UI的过程当中,其实有一个属性很关键,就是那个标有“交互”属性的checkbox,打钩,不打钩,这个看似不重要,其实这就是今天我写这篇文章的”金钥匙“!
我的UI一般是做成全屏的,这样比较方便
场景中注册了onTouchBegan等事件后,自从添加了Layout的UI后,就再也无法响应场景的onTouchBegan了,很奇怪,最后看到了一篇文章:
传送门:
http://www.cocoachina.com/bbs/read.php?tid=197606
嘿嘿,自从把所有”交互“全部取消(除了按钮)以后,就正常了,场景的事件又可以响应了。
那这个”交互“选项内部,到底隐藏着怎样的秘密呢?
Layout* ui = xxxx;
ui->setTouchEnabled(true);
其实”交互“就是设置的是TouchEnabled()这个函数,如果为false,这个Layout就不会注册TouchListener,
事件向下传递,主要看的是onTouchBegan函数,是否返回false,如果返回true,则会被截断,这样后面的Widget或者Layer就无法接受事件了。
因此,如果一个UI打开了这个setTouchEnabled(true); 它的 onTouchBegan 就会返回true,把这个事件吃掉
具体原理,可以参看CCEventDispatcher.cpp
void EventDispatcher::dispatchTouchEvent(EventTouch* event)
{
}
其中有一段代码:
最近使用cocostudio的UI编辑器,遇到了一个问题,就是希望在场景当中注册Touch事件实现手势功能的同时,还能够使用cocostudio的UI编辑器导出的Layout等界面,
之前在做UI的过程当中,其实有一个属性很关键,就是那个标有“交互”属性的checkbox,打钩,不打钩,这个看似不重要,其实这就是今天我写这篇文章的”金钥匙“!
我的UI一般是做成全屏的,这样比较方便
场景中注册了onTouchBegan等事件后,自从添加了Layout的UI后,就再也无法响应场景的onTouchBegan了,很奇怪,最后看到了一篇文章:
传送门:
http://www.cocoachina.com/bbs/read.php?tid=197606
嘿嘿,自从把所有”交互“全部取消(除了按钮)以后,就正常了,场景的事件又可以响应了。
那这个”交互“选项内部,到底隐藏着怎样的秘密呢?
Layout* ui = xxxx;
ui->setTouchEnabled(true);
其实”交互“就是设置的是TouchEnabled()这个函数,如果为false,这个Layout就不会注册TouchListener,
事件向下传递,主要看的是onTouchBegan函数,是否返回false,如果返回true,则会被截断,这样后面的Widget或者Layer就无法接受事件了。
因此,如果一个UI打开了这个setTouchEnabled(true); 它的 onTouchBegan 就会返回true,把这个事件吃掉
具体原理,可以参看CCEventDispatcher.cpp
void EventDispatcher::dispatchTouchEvent(EventTouch* event)
{
}
其中有一段代码:
if (isClaimed && listener->_isRegistered && listener->_needSwallow) { if (isNeedsMutableSet) { mutableTouchesIter = mutableTouches.erase(mutableTouchesIter); isSwallowed = true; } return true; }这个 isClaimed变量其实就是onTouchBegan的返回值,该单词意思为认领,一旦这个Touch事件被某个接受者认领以后,就会在mutableTouches中将其删除,因此就不会继续传递下去了。
相关文章推荐
- Cocos2d-x3.0 载入Cocostudio的UI后,button无法点击的解决方法
- Cocos2d-x3.0 加载Cocostudio的UI后,按钮无法点击的解决方法
- 用C++在cocos2d-x 3.2下完美解决Menu吞掉事件导致ScrollView等无法响应的问题
- Cocos2d-x3.0 加载Cocostudio的UI后,按钮无法点击的解决方法
- cocos2d-x3.0 加载Cocostudio的UI后,按钮无法点击的解决方法
- Cocos2d-X3.0bate_关于一些“无法解析的外部符号”的配置问题解决方法
- Cocos2d-x3.0 载入Cocostudio的UI后,button无法点击的解决方法
- Cocos2d-x3.0 加载Cocostudio的UI后,按钮无法点击的解决方法
- 关于iOS7之后自定义leftnavigationitem后手势无法响应问题的解决办法
- Cocos2d-X3.0bate_关于一些“无法解析的外部符号”的配置问题解决方法
- Android关于嵌套listView时onItemClick事件不响应的解决方法
- 关于OUTLOOK 2007邮件无法打印的问题解决方法
- 关于IIS服务启动失败的问题:“IIS提示‘另一个程序正在使用此文件,进程无法访问’”,的解决方法
- 关于写ATL控件时对控件添加事件事 'IID__IXXXEvents' : undeclared identifier的问题解决方法
- [拦截器]关于拦截方法调用其他内部方法无法被拦截问题的解决
- 关于图片资源在android2.1/2.2/2.3下无法显示的问题以及解决方法
- 关于虚拟机无法拖放问题的解决方法
- 转:用ATL库开发COM组件常见的几个问题 (ie不响应事件,解决悲剧的方法)
- 关于vs2005的“应用程序配置不正确,无法运行”问题的解决方法