【问题标题】:cocos2d 2.x how to swallow touch for CCMenuItemcocos2d 2.x 如何吞下 CCMenuItem 的触摸
【发布时间】:2017-11-27 04:26:53
【问题描述】:

我需要为菜单项吞下触摸。该项目作为子项添加到 SlidingMenuGrid

(by Brandon Reynolds,教程网站现在不知何故不可用,但这里有一个类似的 cocos2d-x 版本https://github.com/prsolucoes/cocos2d-x/blob/474d3a537855331ebfa71ea1cf56c1cb14687402/SlidingMenu.h)。

多年来,它在旧手机上一直为我工作。但在具有 3D 触控功能的较新手机上,屏幕过于“敏感”。当用户点击一个项目时,即使只是移动了一点,点击事件将被取消,屏幕开始滚动。

我怎样才能让它不那么敏感,或者当用户TouchBegan 项目时我可以吞下触摸(以便项目绑定内的TouchedMoved 不会传播到网格)

我尝试在CCMenuItem 中添加一个空的ccTouchBegin 函数,但没有成功

-(void)touchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    // empty implementation to swallow touch
}

【问题讨论】:

    标签: io cocos2d-iphone cocos2d-x


    【解决方案1】:

    如果使用得当,通常CCMenuItem 已经吞下触摸。

    包含它的CCLayer 不应取消触摸。您可能将CCMenuItem 直接作为CCLayer 的孩子。您可以尝试在两者之间添加CCMenu 吗?像

    CCMenu *menu = [CCMenu menuWithItem: item];
    menu.position = ccp(0, 0);
    [self addChild: menu];
    

    【讨论】:

      【解决方案2】:

      你可以在你的 init 函数中为你的场景添加一个监听器,并将它的swallowtouch属性设置为true

      auto listener = EventListenerTouchOneByOne::create();
      listener->setSwallowTouches(true);
      listener->onTouchBegan = CC_CALLBACK_2(YourScene::onTouchBegan, this);
      listener->onTouchEnded = CC_CALLBACK_2(YourScene::onTouchEnded, this);
      _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
      

      并在以下函数中处理触摸事件

      bool YourScene::onTouchEnded(cocos2d::Touch *touch, cocos2d::Event *event)
      {
          //on touch ended code
          return false;
      }
      
      bool YourScene::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
      {
          //on touch began code
          return true;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多