#ios #objective-c #cocos2d-iphone
#iOS #objective-c #cocos2d-iphone
Вопрос:
Возможно ли разрешить системному вызову ccTouchesBegan CCLayer при переходе к элементу CCMenuItem без переопределения класса CCMenuItem ?
Ответ №1:
Добавьте целевой делегат в слой с приоритетом касания меньше, чем приоритет касания меню.
Пример кода приведен ниже :
int touchPriority = 0;
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,
touchPriority ,
true);
CCMenu* menu= CCMenu::create();
menu->setTouchPriority(touchPriority 1);
Комментарии:
1. Я попытался установить значение touchPriority равным 0 для CCLayer и touchPriority 1 для CCMenu, но в результате теперь событие CCLayer OnTouches вообще никогда не срабатывает, только CCMenu касается, как и раньше, но не CCMenuItems. Попробовал инвертировать приоритет 0 на 1 . Тот же результат.
2. ОК. Мне удалось заставить этот код работать, поместив его в функцию OnLoad класса CCLayer, а не в Init . Предположим, что в Objective-C Load и Init являются конструкторами и Create или что-то в этом роде. Теперь срабатывает onTouches. Все еще не удалось заставить CCLayer получить касание при перемещении по CCMenuItems.
3. Прошу прощения. На самом деле это не зависит от события, создания и конструктора. CCLayer вообще не получает прикосновений.
4. По некоторым причинам мне также пришлось добавить TargetedDelegate в CCMenu.
5. Это может зависеть от того, как вы реализовали слои и меню, но я ответил на самое простое решение.