我有我的主场景,在它上面我设置了一个带有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];
答案 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];
}