setTouchPriority无效

setTouchPriority无效

我创建了一个图层,其唯一目的是阻止(“吞咽”)触摸,并且可以打开和关闭此功能。
该类非常基础,如果收到触摸,它总是会吞下它:

bool BlockingLayer::init(){

    // Super init.
    if ( !CCLayer::init() )
    {
        return false;
    }

    setTouchEnabled(true);
    setTouchMode(kCCTouchesOneByOne);
    setTouchPriority(INT_MAX);

    return true;
}



bool BlockingLayer::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLOG("BlockingLayer swallowed touch!");
    return true;
}


因此默认情况下,它的优先级确实很差,如果没有其他类要求它,它将接收触摸。但是在使用此层的场景中,当某些事件发生时,我想将其设置为其他优先级:

bool MyScene::init(int unitNumber, CCString* path){
    // Super init.
    ...
    _blockingLayer = BlockingLayer::create();
    this->addChild(_blockingLayer);

    return true;
}

bool MyScene::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent){
     _blockingLayer->setTouchPriority(INT_MIN);
     ...
}


现在,该图层应该具有最高优先级,因此它应该吞下所有触摸。但是不会,它的行为不会改变。
我看到它的registerWithTouchDispatcher()被调用,并且m_nTouchPriority正确更改。但是图层的行为不变。

这是在Cocos2D-x 2.2上。任何帮助表示赞赏。

最佳答案

在addTargetedDelegate()中,将第三个参数设置为true

 bool BlockingLayer::init(){

    // Super init.
    if ( !CCLayer::init() )
    {
        return false;
    }

    setTouchEnabled(true);
    setTouchMode(kCCTouchesOneByOne);
    setTouchPriority(INT_MAX);

    return true;
}

void BlockingLayer::onEnter()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MAX, true);  //<---- Param (target, touchPriority, isSwallowTouches )
    CCNode::onEnter();
}

void BlockingLayer::onExit()
{
     CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate( this );
     CCNode::onExit();
}


bool BlockingLayer::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    CCLOG("BlockingLayer swallowed touch!");
    return true;
}

关于android - CCLayer setTouchPriority无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22225587/

10-11 11:01