Вызовите ccTouchesBegan, когда я касаюсь CCMenuItem без переопределения класса CCMenuItem

#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. Это может зависеть от того, как вы реализовали слои и меню, но я ответил на самое простое решение.