0

我有我的主要场景,在它上面我设置了一个新层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];
4

1 回答 1

1

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

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

kCCMenuHandlerPriority = -128,

因此,如果您优先播放,我会将图层设置为-256(吞咽触摸)并将您的菜单设置为-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];
}
于 2013-06-17T12:32:53.090 回答