【问题标题】:CCScrollView not swallowing touches in cocos2dxCCScrollView 没有在 cocos2dx 中吞咽触摸
【发布时间】:2013-08-18 15:20:20
【问题描述】:

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

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

我在 SO 上找不到太多关于此的内容,但我发现有人前段时间在常规 cocos2d 中遇到了这个问题:

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

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

我觉得我一定遗漏了一些简单的东西,但我已经无能为力了。关于我做错了什么有什么建议吗?

【问题讨论】:

    标签: touch cocos2d-x ccscrollview


    【解决方案1】:

    我在休息后又回到了这个问题,在重新感到沮丧之后,我发现 CCScrollView 实际上真的想要这种行为。从 CCScrollView.cpp 的第 133-136 行开始:

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

    最后那个false当然是罪魁祸首。

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

    【讨论】:

      【解决方案2】:

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

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 2014-07-03
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        相关资源
        最近更新 更多