Как выборочно проглатывать касания в Kobold2D?

В моем верхнем слое у меня есть спрайт «Кнопка «Назад», который должен получать прикосновения. Обычно все остальные касания должны передаваться на нижние слои, но если эта кнопка «Назад» получает жест касания, она должна проглотить касание.

В настоящее время любые прикосновения к кнопке «Назад» также воспринимаются как прикосновения к нижнему слою.

Верхний слой:

-(id) init {
    if ((self = [super init])) {
        [self scheduleUpdate];
        // Initialize KKInput
        KKInput* input = [KKInput sharedInput];
        input.gestureTapEnabled = input.gesturesAvailable;
        ...
    }
    return self;
}

...

-(void) update:(ccTime)delta
{
    KKInput* input = [KKInput sharedInput];
    if (input.gestureTapRecognizedThisFrame) {
        CCLOG(@"Top layer tap recognized");
        if ([self.backButton containsPoint:input.gestureTapLocation]) {
            CCLOG(@"Top layer Back Button tap recognized");
        }
    }
}

Нижний уровень

-(id) init {
    if ((self = [super init])) {
        [self scheduleUpdate];
        // Initialize KKInput
        KKInput* input = [KKInput sharedInput];
        input.gestureTapEnabled = input.gesturesAvailable;
        ...
    }
    return self;
}

...

-(void) update:(ccTime)delta
{
    KKInput* input = [KKInput sharedInput];
    if (input.gestureTapRecognizedThisFrame) {
        CCLOG(@"Lower layer tap recognized");
    }
}

Если я нажму где-нибудь, кроме кнопки «Назад», результат будет таким, какой я хочу:

2012-10-16 10:58:03.747 MyApp[13838:707] Top layer tap recognized
2012-10-16 10:58:03.749 MyApp[13838:707] Lower layer tap recognized

Но если я нажимаю кнопку «Назад», нажатие не поглощается кнопкой:

2012-10-16 10:49:23.426 MyApp[13838:707] Top layer tap recognized
2012-10-16 10:49:23.429 MyApp[13838:707] Top layer Back Button tap recognized
2012-10-16 10:49:23.434 MyApp[13838:707] Lower layer tap recognized

person Paul Masri-Stone    schedule 16.10.2012    source источник


Ответы (1)


Чтобы очистить состояние жеста, вы можете выключить его и снова включить. Это должно сработать, если вы добавите это, когда обрабатываете первый жест касания:

input.gestureTapEnabled = NO;
input.gestureTapEnabled = YES;
person LearnCocos2D    schedule 16.10.2012
comment
это не сработало для меня. Я вставил это сразу после того, как CCLOG(@Top Layer Tap Button Back Tap Tap Recognized);, но нижний слой по-прежнему реагировал на нажатие. Возможно, уже слишком поздно отключать/включать жест на данный момент? - person Paul Masri-Stone; 16.10.2012