CCLayer调整触摸区域的大小 接受触摸事件 调整优先级等的理解
2013-08-05 15:17
267 查看
(转载请注明出处,谢谢:/article/5599977.html)
原来一直就对这个CCLayer的使用不够清楚,尤其是对其事件的处理方面,害怕研究起来麻烦,凑活着实现就好了,可是这样带来的后果就是每回都会麻烦,相当耗时间(让我想起来一句俗语:人骗地一天,地骗人一年,好像有所以"种地"还是踏踏实实的好)。所以这回就花了些时间研究了一下,终于认为能够解决一般涉及到的CCLayer的问题了,就赶紧的做个小笔记,防止以后再忘记。其中有不对的地方,还望各位多多指教。
1.CCLayer调整触摸域
我曾经试过使用CCLayer中的-(void) setContentSize: (CGSize) size这个方法去调整CCLayer的大小,以为这样就可以调整触摸域,但是没有效果。因为这个CCLayer是无法调整大小的,它的大小是整个场景的大小。如果你点进入.m中去看的话,会发现这个方法是调整CCLayerColor的大小,即显示区域的大小。
所以这个调整大小不通,我就这能控制触摸响应区域了,这个奏效了。举个例子,见下图:
在场景上我添加了一个接收触摸层,让后我想让这个触摸层覆盖的那些按钮不可响应事件,而在旁边的1-6个按钮可以响应。于是我就调整大小,失败。使用吞没事件,虽然身下的按钮不能响应了,但是1-6也响应不了了(这也间接的说明,CCLayer的大小就是整个场景的大小)。
处理方法:
步骤一:设置接收触摸层的响应事件优先级为最高,并且吞没事件处理(这个特别重要,如果不吞没,那么身下的按钮也可以响应,可以试试看)
步骤二:重写
完成以上工作后,那么就可以实现预想的效果了。
2.CCLayer吞噬触摸事件
首先,layer要可接受触摸:layer.isTouchEnabled = YES;
然后,layer吞没事件:[[[CCDirectorsharedDirector] touchDispatcher] addTargetedDelegate:layer priority:priorityYouWant swallowsTouches:YES];
(转载请注明出处,谢谢:/article/5599977.html)
3.CCLayer在默认状态不可调节锚点,containerStartLayer.ignoreAnchorPointForPosition = YES;之后调整锚点有效
4.CCLayer虽然触摸区域没有大小,但是存在锚点和位置,是这个层相对与父类节点的的锚点和位置,然后触摸区域无限延伸,与场景的大小一致
原来一直就对这个CCLayer的使用不够清楚,尤其是对其事件的处理方面,害怕研究起来麻烦,凑活着实现就好了,可是这样带来的后果就是每回都会麻烦,相当耗时间(让我想起来一句俗语:人骗地一天,地骗人一年,好像有所以"种地"还是踏踏实实的好)。所以这回就花了些时间研究了一下,终于认为能够解决一般涉及到的CCLayer的问题了,就赶紧的做个小笔记,防止以后再忘记。其中有不对的地方,还望各位多多指教。
1.CCLayer调整触摸域
我曾经试过使用CCLayer中的-(void) setContentSize: (CGSize) size这个方法去调整CCLayer的大小,以为这样就可以调整触摸域,但是没有效果。因为这个CCLayer是无法调整大小的,它的大小是整个场景的大小。如果你点进入.m中去看的话,会发现这个方法是调整CCLayerColor的大小,即显示区域的大小。
所以这个调整大小不通,我就这能控制触摸响应区域了,这个奏效了。举个例子,见下图:
在场景上我添加了一个接收触摸层,让后我想让这个触摸层覆盖的那些按钮不可响应事件,而在旁边的1-6个按钮可以响应。于是我就调整大小,失败。使用吞没事件,虽然身下的按钮不能响应了,但是1-6也响应不了了(这也间接的说明,CCLayer的大小就是整个场景的大小)。
处理方法:
步骤一:设置接收触摸层的响应事件优先级为最高,并且吞没事件处理(这个特别重要,如果不吞没,那么身下的按钮也可以响应,可以试试看)
步骤二:重写
1 - (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 2 { 3 //控制触摸区域 4 //获取触摸点 5 CGPoint touchPoint = [touch locationInView:[touch view]]; 6 touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint]; 7 8 //判断触摸点是否在该控制区域内CGRectMake(0, 30, 440, 290) 9 if(!CGRectContainsPoint(CGRectMake(0, 30, 440, 290),touchPoint))//该CGRectMake()数据是针对上边示意图大概估计的数,随着实际情况而定 10 { 11 return NO;//不在区域内返回NO,该接收触摸层就不会接收这个触摸事件,并且往下传,也就是那个事件吞没就失效了,那么1-6按钮可以响应 12 } 13 returnYES;//返回YES接收这个触摸事件,并且不再往下传播,本层处理,那么被覆盖的按钮就不会响应 14 }
完成以上工作后,那么就可以实现预想的效果了。
2.CCLayer吞噬触摸事件
首先,layer要可接受触摸:layer.isTouchEnabled = YES;
然后,layer吞没事件:[[[CCDirectorsharedDirector] touchDispatcher] addTargetedDelegate:layer priority:priorityYouWant swallowsTouches:YES];
(转载请注明出处,谢谢:/article/5599977.html)
3.CCLayer在默认状态不可调节锚点,containerStartLayer.ignoreAnchorPointForPosition = YES;之后调整锚点有效
4.CCLayer虽然触摸区域没有大小,但是存在锚点和位置,是这个层相对与父类节点的的锚点和位置,然后触摸区域无限延伸,与场景的大小一致
相关文章推荐
- iOS Dev (70) 让 CCLayer 接受触摸或加速计事件
- cocos2dx ScrollView 测试一 触摸事件优先级和自动调整
- Android触摸事件传递机制实践——可拖动、大小切换的SizeSwitchView
- cocos2d-x触摸事件优先级的探究与实践
- 一个demo让你彻底理解Android中触摸事件的分发
- Cocos2d-x游戏开发之单击事件_锁定触摸区域外的界面
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- jsp页面窗口大小调整触发事件
- js 浏览器窗口大小调整事件
- NSSplitView 三个区域拖动联动调整相关控件大小
- 自定义UILabel,接受触摸事件
- android 关于触摸事件的理解
- cocos2d ccLayer响应触摸事件方法:CCStandardTouchDelegate 与 CCTargetedTouchDelegate
- 让覆盖在下面层的视图接受触摸事件
- 对于android触摸事件模型的一些理解
- Android触摸事件传递的简单理解
- 关于Android触摸事件的一些理解
- Android二维码ZXing扫描区域大小的调整,提高扫描速度
- 使用Google的zxing组件识别二维码时,调整扫描区域和取景框的大小
- cocos2dx CCLayer接受 touch 事件