Приоритет касаний в cocos2d / cocos2d-x

Я пытаюсь поиграть с штрихами в cocos2d- х. У меня есть вопрос о приоритете касаний, например, когда я использую CCMenuItemSprite или CCControlButton, которые добавляются на слой, который имеет setTouchEnabled(true)

или даже если я поставлю «То, что я обнаружил», прикосновение сначала не передается ccTouchesBegan (... я имею в виду Layer), вместо этого оно принимается CCMenuItemSprite или CCCOntrolButton обратными вызовами.

Более того, если я добавлю верхний слой на все слои и setTouchEnable (True), то те же результаты, которые я получаю, сначала касаются элемента меню и кнопки управления, которая после касания поглощает прикосновения.

Есть ли способ изменить приоритет касаний? или Есть ли способ, которым я могу переопределить CCControlButton или CCMEnuItemSprite ... ccTouchesBegan или перемещен в конце концов Я хочу, чтобы местоположение касания CCMenuItem или CControlButton, иначе мне пришлось бы пересмотреть CCSprite?


person user1169079    schedule 19.09.2012    source источник


Ответы (3)


перезапишите свой метод CCLayer

YOUR_LAYER::registerWithTouchDispatcher{
    CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, INT_MIN, true);
}
person m.ding    schedule 19.09.2012

Вы можете найти это на CCMenu.h

enum {
    //* priority used by the menu for the event handler
    kCCMenuHandlerPriority = -128,
};

поэтому приоритет меню по умолчанию установлен на -128, если вы хотите, чтобы некоторые слои обнаруживали касание перед CCMenu, попробуйте установить их приоритет менее -128

person Listen    schedule 24.10.2012

То, что сначала обнаружит прикосновения, зависит только от приоритета виджета, я думаю, что вас смущает то, что вы можете подумать, что это зависит от Zorder виджета. Таким образом, вы можете изменить приоритет добавленного слоя и убедитесь, что приоритет ниже, чем приоритет пунктов меню, который в Cococs2d-x равен -128.

CCLayer.h

/** priority of the touch events. Default is 0 */
virtual void setTouchPriority(int priority);    

CCMenu.h

enum {
    //* priority used by the menu for the event handler
    kCCMenuHandlerPriority = -128,
};
person Edi Smith    schedule 29.10.2014