cocos2d屏蔽底层点击事件

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;   // 其它地方可以捕获点击事件

posted on 2012-05-23 23:16  tuyozou  阅读(938)  评论(0编辑  收藏  举报