Cocos2d层并触及优先级管理

时间:2013-06-17 12:23:11

标签: cocos2d-iphone

我有我的主场景,在它上面我设置了一个带有CCLayer的新图层,这个图层有一个按钮。 但当我点击那个按钮(CCMenu)时,它后面的图层也会触及并做一些事情。

我想只启用上层触摸,而不是下面的触摸。 我怎样才能做到这一点 ? (设置触摸优先级?如何?)

编辑:

我的图层就是这样:

-(CCLayer*)showHelpLayer
{

    self.isTouchEnabled=YES;
    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:-256 swallowsTouches:YES];
...
...

     [self addChild:menu];
    [menu setHandlerPriority:-257];
    return self;
}

我将它添加到主场景中:

    helpLayer *hlp=[[helpLayer alloc]init];
    [hlp showHelpLayer];
    [self addChild:hlp z:100];

1 个答案:

答案 0 :(得分:1)

你可以优先玩具,但它变得讨厌。我只在非常具体,充分包含的情况下这样做。最好的方法是在推送新图层和控制对象之前禁用“底层场景”上的输入。

如果您选择使用优先级,请记住所有菜单都默认为此优先级(cocos2D 2.xx):

kCCMenuHandlerPriority = -128,

所以如果你玩优先级,我会把图层放在-256(吞咽触摸)和setHandlerPriority为-257的菜单。因此,任何落入菜单的内容都会被图层捕获并吞下(即不会传递到“下方”)。

优先级方法的示例。飞越菜单是一个扩展CCNode的类,在init方法中创建所有菜单对象之后执行此操作:

- (void)onEnter {

    [super onEnter];

    MPLOGDEBUG(@"");
    [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate:self priority:-256 swallowsTouches:YES];
    [_backMenu setHandlerPriority:-257];
    [_toggleOptionsMenu setHandlerPriority:-257];
    [_dialogMenu setHandlerPriority:-257];
    [_labelMenu setHandlerPriority:-257];
}