cocos2d:
最近做项目,有这么一种需求。
有A层和B层,A层在B层上面(A的z轴>B的z轴),B层此时已经给遮住了。
A层只有一张图片,B层上有CCMenu。
要求点击A层任何地方,然后A层删除,这样就会看到B层了。
我开始时候做法是:
A层:
// init method self.isTouchEnabled = YES; -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.parent removeChild:self cleanup:YES]; }
这样的话基本可以实现需求,但是此时B层上的CCMenu可以响应点击事件(CCMenu优先级很高)。
如果所点击的屏幕坐标在B层CCMenu菜单上的区域时,B层将会捕获并吞噬该点击事件(A层的ccTouchesBegan事件不执行,A层无法删除)。
解决方案:
设置A层捕获点击事件的优先级
A层:
// init method self.isTouchEnabled = YES; [[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority - 1 swallowsTouches:YES]; // delete // -(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event // { // [self.parent removeChild:self cleanup:YES]; // } // add -(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event { [self.parent removeChild:self cleanup:YES]; return YES; }
上面代码
priority:kCCMenuTouchPriority - 1 设置优先级比CCMenu还要高一点
ccTouchBegan中,
return YES; // 吞噬点击事件,其它地方不可捕获点击事件
return NO; // 其它地方可以捕获点击事件