[求助] setTouchPriority无效

UILayer1 有触摸 优先级为默认0
UILayer2 有触摸 优先级为默认-5
UILayer2 打开UILayer1 设置UILayer1的zorder 显示正常
这时触摸事件还在UILayer2,
为了UILayer1 能触摸 我提高其触摸优先级 UILayer1->setTouchPriority(-999) 发现还是不行,大家有解决方法没

楼主你好,触摸穿透你开了吧?

不是触摸穿透 是想截断不分发 将触摸响应在UILayer1层

貌似最大就是-128.你试一试小点的值

一样是不行

直接贴代码吧,这样问题方便解决些

void MineralPanel::show1( CCObject* pSender )
{
layer2->setZOrder(99);
layer2->setTouchPriority(-99);
layer1->setZOrder(100);
layer1->setTouchPriority(-100);
}

void MineralPanel::show2( CCObject* pSender )
{
layer2->setZOrder(100);
layer2->setTouchPriority(-100);//设置无效, 测试只能在 onEnter 之前设置有效
layer1->setZOrder(99);
layer1->setTouchPriority(-99);
}

void MineralPanel::OpenMineralPanel( CCObject* sender)
{
layer1 = UILayer::create();
UIPanel* panel1 = UIPanel::create();
panel1->setTouchEnabled(true);
panel1->setSize(ccp(960,640));
panel1->setBackGroundColorType(LayoutBackGroundColorType::LAYOUT_COLOR_SOLID);
panel1->setBackGroundColor(ccc3(255,0,0));
panel1->setColor(ccc3(255,0,0));
UILabel* textButton= UILabel::create();
textButton->setText(“current:layer1,open-open-open-layer2”);
textButton->setSize(ccp(200,200));
textButton->setFontSize(24);
textButton->setTouchEnabled(true);
textButton->setPosition(ccp(480,320));
textButton->addReleaseEvent(this,coco_releaseselector(MineralPanel::show2));
panel1->addChild(textButton);
panel1->setTouchEnable(true);
layer1->addWidget(panel1);
layer1->setTouchPriority(-100);
CCDirector::sharedDirector()->getRunningScene()->addChild(layer1,100);

layer2 = UILayer::create();
UIPanel* panel2 = UIPanel::create();  
panel2->setTouchEnabled(true);
panel2->setSize(ccp(960,640));
panel2->setBackGroundColorType(LayoutBackGroundColorType::LAYOUT_COLOR_SOLID);
panel2->setBackGroundColor(ccc3(0,255,0));
panel2->setColor(ccc3(255,0,0));
panel2->setTouchEnable(true);
layer2->addWidget(panel2);
UILabel* textButton2= UILabel::create();
textButton2->setText("current:layer2,open-open-open-layer1");
textButton2->setFontSize(24);
textButton2->setSize(ccp(200,200));
textButton2->setTouchEnable(true);
textButton2->setPosition(ccp(480,320));
textButton2->addReleaseEvent(this,coco_releaseselector(MineralPanel::show1));
panel2->addChild(textButton2);
CCDirector::sharedDirector()->getRunningScene()->addChild(layer2,99);
layer2->setTouchPriority(-99);
return;

楼主你好,建议你不要弄优先级了,先自己控制使只能让一个可以点击,以后这块将统一用zorder管理。

我也遇到过相似的问题,不过我是使用了CCLayer而非cocostudio的组件

层A 触摸优先级为1
层B 触摸优先级为0 并且SwallowTouch 为 true

当A B 都创建完毕后, 动态更改层A的优先级为 < 0的值,触摸仍然会被层B优先接收并截断。