CCScrollView不会吞噬cocos2dx中的触摸

时间:2013-08-18 15:20:21

标签: touch cocos2d-x ccscrollview

我在弹出式选项卡中使用CCScrollView,它与屏幕上的某些现有控件重叠。问题是虽然CCScrollView正确地响应触摸,但触摸不会被吞下,因此它下面的控件也会响应它们。

我验证了控件正在将自己注册为TouchDispatcher的目标委托,我实际上在CCScrollView :: ccTouchBegan中的“return true”上设置了一个断点并观察它是否触及它,但触摸仍然传递给控件也在下面。

我在SO上找不到太多,但我发现有人在常规的cocos2d中遇到过这个问题:

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

不幸的是,那里唯一的答案没有帮助。

我觉得我必须错过一些简单的东西,但我只是在我的智慧结束。关于我做错了什么建议?

2 个答案:

答案 0 :(得分:2)

我在休息后回到问题,经过一些新的挫折后,我发现CCScrollView实际上真的想要这种行为。从CCScrollView.cpp的第133-136行:

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

最后 false 当然是罪魁祸首。

我完全不知道为什么有人会想要这个作为默认行为,但至少我的代码现在可以正常工作。

答案 1 :(得分:0)

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);

}