解决方案是重写一个Layer,加在上下层中间,即可只响应上层事件,阻断了下层的事件,设置优先级,代码如下
#ifndef _TouchBlockLayer_H_
#define _TouchBlockLayer_H_
class TouchBlockLayer:public CCLayer
{
public:
TouchBlockLayer();
virtual~TouchBlockLayer();
virtual bool ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
virtual void ccTouchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
virtual void ccTouchEnded(cocos2d::CCTouch* touch, cocos2d::CCEvent* event);
virtual void onEnter();
virtual void onExit();
static TouchBlockLayer *create();
};
#include "TouchBlockLayer.h"
TouchBlockLayer::TouchBlockLayer()
{
}
TouchBlockLayer::~TouchBlockLayer()
{
}
TouchBlockLayer *TouchBlockLayer::create()
{
TouchBlockLayer *pRet = new TouchBlockLayer();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}
bool TouchBlockLayer::ccTouchBegan(cocos2d::CCTouch* touch, cocos2d::CCEvent* event)
{
CCLOG("ccTouchBegan");
return true;
}
void TouchBlockLayer::ccTouchMoved(cocos2d::CCTouch* touch, cocos2d::CCEvent* event)
{
CCLOG("ccTouchMoved");
}
void TouchBlockLayer::ccTouchEnded(cocos2d::CCTouch* touch, cocos2d::CCEvent* event)
{
CCLOG("ccTouchEnded");
}
void TouchBlockLayer::onEnter()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-1023,true);
CCLayer::onEnter();
}
void TouchBlockLayer::onExit()
{
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}
TouchBlockLayer *pBlockBg = TouchBlockLayer::create();
addChild(pBlockBg,997);
CCScrollView* pServRoll = CCScrollView::create(CCSizeMake(640 , 960),CCLayer::create());
addChild(pServRoll,999);
pServRoll->setTouchPriority(-1024);
只要你想阻断的,优先级比阻断层以及上层低就可以了