Cocos2d:如何从上z阶层停止点击下z阶层的按钮?

时间:2014-03-24 14:24:04

标签: ios cocos2d-iphone

我正在开发一个cocos2d游戏,我有一个名为GamePlaylayer的CCLayer和另一个名为ShopLayer的CCLayer。 ShopLayer是一个全屏图层。 GamePlayLayer是touchenabled并有多个按钮(CCMenuItemImage)。 ShopLayer可通过商店按钮访问,该按钮具有以下@selector。

  (void) onClickShop {   
     ShopLayer * shop = [[ShopLayer alloc] init];
     [self addChild:shop z:40]; }

为了停止触控传播,我在ShopLayer中使用了CCTouchOneByOneDelegate和以下方法。

(void) onEnter {
     [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self
                                                               priority:0 swallowsTouches:YES];
     [super onEnter];
}

(void) onExit {
     [[[CCDirector sharedDirector] touchDispatcher] removeDelegate:self];

     [super onExit];
}

(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
     return YES;
}

现在它停止调用GamePlayLayer的ccTouchesBegan,这很好。但它无法阻止GamePlayLayer的其他按钮被调用。因此,当我触摸放置GamePlayLayer按钮的位置时,即使我看不到它们也会被调用。

所以我的问题是如何停止从上层点击下层按钮?

2 个答案:

答案 0 :(得分:0)

使用kCCMenuHandlerPriority作为触控优先级

    [[[CCDirector sharedDirector] touchDispatcher] addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];

答案 1 :(得分:0)

此类的SetTouch优先级为kCCMenuHandlerPriority。