В соответствии с вашим кодом проблема заключается в том, что модальный слой глотает события, даже если он предназначен для собственных детей.
Чтобы решить эту проблему, необходимо установить приоритет касания детей даже выше, чемсам модальный слой.Другими словами, установите значение приоритета касания меню ниже уровня модального слоя.
Есть два решения.
- Просто переопределите метод "CCMenu :: registerWithTouchDispatcher ()" и установите приоритет вышес начала.
- Изменить приоритет касания меню с помощью метода "setPriority" touchDispatcher или "setHandlerPriority" самого меню.
Чтобы найти второе решение, вы должны обратить внимание навремя«CCMenu :: registerWithTouchDispatcher ()» вызывается где-то ПОСЛЕ «onEnter» и «onEnterTransitionDidFinish».
Итак, используйте «scheduleOnce» или что-то в этом роде.
Примеры кодов.
- (id) initWithColor:(ccColor4B)c delegate:(id)_delegate {
self = [super initWithColor:c];
if (self != nil) {
//your codes...... put CCMenu in instance
[self scheduleOnce:@selector(setMenuPriority:) delay:0];
}
return self;
}
- (void) setMenuPriority (ccTime)dt {
[[[CCDirector sharedDirector] touchDispatcher] setPriority:INT_MIN forDelegate:menu];
//priority "INT_MIN" because you set the layer's priority to "INT_MIN+1".
}
PS: Мой английский не очень хорош, поэтому, если есть свободные предложения, исправление будет очень приятно:)