我有一个CCLayer,我用它作为暂停菜单。它占据整个屏幕,但目前允许触摸通过它。
我想防止触摸通过它,但我遇到了一些困难。这就是我所拥有的:
-(id)init{
if(self = [super init]){
CGSize s = [[CCDirector sharedDirector] winSize];
self = [CCLayerColor layerWithColor: ccc4(11, 153, 223, 255) width: s.width height: s.height];
self.position = CGPointZero;
self.isTouchEnabled = YES;
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
}
return self;
}
但是,图层上的触摸会导致崩溃,但似乎也能够通过它。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Layer#ccTouchBegan override me'
防止触摸通过此cclayer的最简单方法是什么?感谢
答案 0 :(得分:4)
将图层添加为目标触摸委托后,必须实现CCTargetedTouchDelegate方法。至少
- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
此方法是必需的。其他是可选的。并且您不应该以这种方式将图层添加为触摸委托。 CCLayer类中有一个方法
- (void) registerWithTouchDispatcher
覆盖它并放置你的行
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];
如果你想在一段时间内通过这一层传递触摸,你可以写下这一行
[myLayer setIsTouchEnabled: NO];
或者如果你想在某些矩形中捕捉到触摸,你必须在ccTouchBegan:withEvent:
方法中实现你的逻辑。如果此方法返回NO
,则此触摸可由任何其他触摸委托处理。如果此方法返回YES
,则此触摸不会传递给任何其他触摸代理
答案 1 :(得分:0)
基本上,所有的cocos2d图层都在一个单独的UIView中,并且所有的触摸都不是这个层,而是通过这个UIView。
为了防止触摸,您可以尝试从CCTouchDicpatcher
中删除委托图层isTouchEnabled
属性中的委托给NO
。