cocos2dx中,layer的响应问题

参看如下代码:

class CLayer1: public CCLayer
{
public:
CREATE_FUNC(CCallMainLayer, create);
CLayer1()
{
cocos2d::gui::TouchGroup* pUILayer1 = cocos2d::gui::TouchGroup::create();
addChild(pUILayer1);
cocos2d::gui::Layout* pLayout1 = dynamic_castcocos2d::gui::Layout*(GUIReader::shareReader()->widgetFromJsonFile(“json/layer1.json”));
pUILayer1->addWidget(pLayout1);
addChild(pUILayer1);
};
};

class CLayer2: public CCLayer
{
public:
CREATE_FUNC(CCallMainLayer, create);
CLayer2()
{
cocos2d::gui::TouchGroup* pUILayer2 = cocos2d::gui::TouchGroup::create();
addChild(pUILayer2);
cocos2d::gui::Layout* pLayout2 = dynamic_castcocos2d::gui::Layout*(GUIReader::shareReader()->widgetFromJsonFile(“json/layer2.json”));
pUILayer2->addWidget(pLayout2);
addChild(pUILayer2);
};
};

class CLayer3: public CCLayer
{
CLayer3()
{
CCNode* pLayer1 = CLayer1::create();
CCNode* pLayer2 = CLayer2::create();
this->addChild(pLayer1);
this->addChild(pLayer2);
}
}
在我用CLayer3生产的页面中, 只能响应json/layer1.json中的button. 而在json/layer2.json的button不响应??
原因何在?

楼主, addChild(pUILayer2); 你的层都是加了两次么?

另外,是否有示例截图,这两个层的按钮是同一个位置么?

楼主你好,
按照你的代码测试过了,没有问题。
代码如下:
CLayer1::CLayer1()
{

}

CLayer1::~CLayer1()
{

}

CLayer1* CLayer1::create()
{
CLayer1* pRet = new CLayer1();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}

bool CLayer1::init()
{
if (CCLayer::init())
{
cocos2d::gui::TouchGroup* pUILayer1 = cocos2d::gui::TouchGroup::create();
addChild(pUILayer1);
cocos2d::gui::Layout* pLayout1 = dynamic_castcocos2d::gui::Layout*(GUIReader::shareReader()->widgetFromJsonFile(“cocosgui/UITest/UITest.json”));
pUILayer1->addWidget(pLayout1);

    Button* left_button = static_cast<Button*>(UIHelper::seekWidgetByName(pLayout1, "left_Button"));
    left_button->addTouchEventListener(this, toucheventselector(CLayer1::callback));
    
    return true;
}
return false;

}

void CLayer1::callback(CCObject *sender, TouchEventType type)
{
CCLOG(“clayer1 button”);
}

CLayer2::CLayer2()
{

}

CLayer2::~CLayer2()
{

}

CLayer2* CLayer2::create()
{
CLayer2* pRet = new CLayer2();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}

bool CLayer2::init()
{
if (CCLayer::init())
{
cocos2d::gui::TouchGroup* pUILayer2 = cocos2d::gui::TouchGroup::create();
addChild(pUILayer2);
cocos2d::gui::Layout* pLayout2 = dynamic_castcocos2d::gui::Layout*(GUIReader::shareReader()->widgetFromJsonFile(“cocosgui/UITest/UITest.json”));
pUILayer2->addWidget(pLayout2);

    Button* left_button = static_cast<Button*>(UIHelper::seekWidgetByName(pLayout2, "left_Button"));
    left_button->addTouchEventListener(this, toucheventselector(CLayer1::callback));
    
    return true;
}
return false;

}

void CLayer2::callback(CCObject *sender, TouchEventType type)
{
CCLOG(“clayer2 button”);
}

CLayer3::CLayer3()
{

}

CLayer3::~CLayer3()
{

}

CLayer3* CLayer3::create()
{
CLayer3* pRet = new CLayer3();
if (pRet && pRet->init())
{
pRet->autorelease();
return pRet;
}
else
{
CC_SAFE_DELETE(pRet);
return NULL;
}
}

void CLayer3::onEnter()
{
CCLayer::onEnter();

CLayer1* pLayer1 = CLayer1::create();
CLayer2* pLayer2 = CLayer2::create();
this->addChild(pLayer1);
this->addChild(pLayer2);

pLayer2->setPosition(ccp(40, 40));

}

CCLOG(“clayer1 button”);
CCLOG(“clayer2 button”);
都可以打印出来

楼主能否给出资源,我们对楼主的资源再测试一遍

我们对 CLayer1 和 CLayer2 中方向向左的剪头绑定了 touch 事件

。。。。。人家没说显示不出来,是有一个会没响应