1

我有一个 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 的最简单方法是什么?谢谢

4

2 回答 2

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,此触摸将不会传递给任何其他触摸委托

于 2012-06-20T07:43:36.817 回答
0

基本上所有的 cocos2d 层都在一个单一的 UIView 中,所有的触摸都不是这个层,而是这个 UIView。为了防止触摸,您可以尝试从CCTouchDicpatcher设置图层的isTouchEnabled属性中删除委托NO

于 2012-06-20T07:36:23.943 回答