CCScrollView не глотает прикосновения в cocos2dx

Я использую CCScrollView во всплывающей вкладке, которая перекрывает некоторые существующие элементы управления на экране. Проблема в том, что, хотя CCScrollView правильно реагирует на прикосновения, прикосновения не проглатываются, поэтому элементы управления под ним также реагируют на них.

Я проверил, что элемент управления регистрирует себя как целевой делегат с TouchDispatcher, и я фактически установил точку останова на "возвращаемом истине" в CCScrollView::ccTouchBegan и наблюдал, как он ударил его, но касания все еще передавались элементам управления, находящимся под ним.

Я не мог найти много об этом на SO, но я обнаружил, что кто-то имел эту проблему некоторое время назад в обычном cocos2d:

http://www.cocos2d-iphone.org/forums/topic/making-ccscrollview-swallow-touches-but-still-scroll/

к сожалению, единственный ответ там не помог.

Я чувствую, что, должно быть, упускаю что-то простое, но я почти на грани ума. Любой совет, что я делаю не так?

2 ответа

Решение

Я вернулся к проблеме после перерыва и после некоторого разочарования обнаружил, что CCScrollView действительно действительно хочет этого поведения. Из строк 133-136 в CCScrollView.cpp:

void CCScrollView::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, CCLayer::getTouchPriority(), false);
}

Это ложное в конце, конечно, виновник.

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

MyLayer:: MyLayer ()

{

CCWidgetLayout * widgetLayout = CCWidgetLayout:: create ();

AddChild (widgetLayout);

CCScroll * scroll = = CCScroll:: create (CCSize (480 800));

    scroll->setPosition(ccp(480,800));
    scroll->setScrollSelector(this, scroll_selector(MyLayer::onScrolling));
    scroll->setDirection(eScrollDirectionVertical);
    widgetLayout->addChild(scroll);

      sprite = CCSprite::create("scrollcontent.png");   
      scroll->setContainerSize(sprite->getContentSize());
      scroll->getContainer()->addChild(sprite);

}

Другие вопросы по тегам