CCScrollView在cocos2dx中未吞咽触摸



我在弹出选项卡中使用CCScrollView,该选项卡与屏幕上的一些现有控件重叠。问题是,尽管CCScrollView对触摸做出了正确的响应,但触摸并没有被吞咽,因此它下面的控件也会对触摸做出响应。

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

我在SO上找不到太多关于这方面的信息,但我发现不久前有人在常规cocos2d:中遇到了这个问题

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

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

我觉得我一定错过了一些简单的东西,但我已经无计可施了。关于我做错了什么有什么建议吗?

我在休息后又回到了这个问题上,在再次感到沮丧之后,我发现CCScrollView实际上真的想要这种行为。来自CCScrollView.cpp的133-136行:

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

结尾处的false当然是罪魁祸首。

我完全不知道为什么有人希望将此作为默认行为,但至少我的代码现在可以工作了。

MyLayer::MyLayer()

CCWidgetLayout*widgetLayout=CCCWidgetlayout::create();

addChild(小部件布局);

CCScroll*scroll==CCScroll::create(CCSize(480800));

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

}

相关内容

  • 没有找到相关文章

最新更新