Как выборочно глотать прикосновения в 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
1 ответ
Чтобы очистить состояние жеста, вы можете выключить его и снова включить. Это должно сделать свое дело, если вы добавите это, где вы обрабатываете первый жест касания:
input.gestureTapEnabled = NO;
input.gestureTapEnabled = YES;