cocos2dx3.0 调用cocostudio UI 按钮报错

我在cocos2dx 里面已经成功调用cocostudio里面的UI,但是在跟button交互的时候,竟然报错,很纠结,下面是代码:

Widget *pWidget = dynamic_cast(cocostudio::GUIReader::getInstance()->widgetFromJsonFile("SimpleGame_1/SimpleGame_1.json"));

Button* button = dynamic_cast(pWidget->getChildByTag(4));

button ->addTouchEventListener(this, toucheventselector(HelloWorld::cltestFunction));

this->addChild(pWidget);

回调反馈代码:

void HelloWorld::cltestFunction( Object* object, TouchEventType type ){

CCLOG("%s", "TESTMSG-bef");

switch (type)

{

case TouchEventType::TOUCH_EVENT_BEGAN:

CCLOG("%s","TESTMSG");

break;

case TouchEventType::TOUCH_EVENT_MOVED:

CCLOG("%s","TESTMSG");

break;

case TouchEventType::TOUCH_EVENT_ENDED:

CCLOG("%s", "TESTMSG");

break;

case TouchEventType::TOUCH_EVENT_CANCELED:

CCLOG("%s", "TESTMSG");

break;

default:

break;

}

}

报错信息为:

selector 0x01061230 {simpleGame01.exe!HelloWorld::cltestFunction(class cocos2d::Ref *,enum cocos2d::ui::TouchEventType)} void (cocos2d::Ref *, cocos2d::ui::TouchEventType) *


+ target 0x0a54e490 {...} cocos2d::Ref *




拜托了

我也是这样报错,我用的是lua项目,现在只能是用cocosstudio设计完了手动一个个UI进行加载。。。。很头疼

按钮的回调函数参数改成:Ref* pSender,TouchEventType type,应该改就可以了

额,自己解决自己的问题哈:
我用cocostudio的时候,是将button放到一个容器里面了。所以,在通过tag获取button的时候,需要先获取容器,在获取容器里面的button。错误代码如下:
Button* button = dynamic_cast(pWidget->getChildByTag(4));
换成
Button* button = dynamic_cast(pWidget->getChildByTag(2)->getChildByTag(4));
就好了。血的教训 啊!! 不明白, tag不能设置成唯一的?

额,参照这位的办法,我的问题也得到解决了,原来studio对层次要求比较严格