【已解决】【求助】给场景中的ui中的按钮添加监听

我在场景编辑器里加了一个用UI编辑器编辑的ui组件,ui里有一个按钮。 代码中我用CCSSceneReader的createNodeWithSceneFile的方式把场景加载了进去。
现在我想给UI里的按钮加监听,可是我只得到了UI的CCComponent,不知道接下来应该怎么做了。。
示例代码中只有直接从ui给按钮绑定的例子,没有从场景得到ui再得到按钮的例子。

1.CCNode *pNode = CCSSceneReader::sharedSceneReader()->createNodeWithSceneFile(“scene.json”);
2.CCComRender pFishRender = (CCComRender)(pNode->getChildByTag(10004)->getComponent(“ui_btn”));

到这步我就不知道怎么弄了。

场景编辑器中对象结构:

  sprite_bg(一张背景精灵,tag:10003)
  ui_btn(ui编辑器导出的文件,tag:10004,别名和名字都设为了ui_btn)

UI编辑器中对象结构:

  btn0(一个按钮,tag:4)

CCComRender pUIRender = dynamic_cast<CCComRender>(m_pCurNode->getChildByTag(2)->getComponent(“GUIComponent”));
UILayer pUILayer = dynamic_cast<UILayer>(pUIRender->getRender());
UIButton pButton = dynamic_cast<UIButton>(pUILayer->getWidgetByName(“Button”));
CCLOG(“pButton name = %s”, pButton->getName());

— Begin quote from ____

%url%chengstory 发表于 2013-8-29 18:00
CCComRender *pUIRender = dynamic_cast(m_pCurNode->getChildByTag(2)->getComponent(“GUIComponent”));

— End quote

{:3_59:}救星啊!谢谢!代码完美运行!
原来是要先强转成UILayer
谢谢!

— Begin quote from ____

%url%小雨 发表于 2013-8-29 17:30
我没用过场景编辑器啊……

话说转化成UIWidget的话,(UIWidget*)这样强制转换可以么=。= …

— End quote

不行啊,会崩掉

— Begin quote from ____

%url%丢失用户。 发表于 2013-8-29 16:31
哎,怎么大家都不好好看看我问的问题就回答呢。。
楼上的朋友,
“mainWidget(mainWidget = CCUIHELPER->ge …

— End quote

看错了,我眼睛不好,近视……:dizzy:

— Begin quote from ____

%url%小雨 发表于 2013-8-29 17:05
看错了,我眼睛不好,近视……

— End quote

哈哈,没事。那现在知道我的问题以后,有没有好的办法解决啊{:3_55:}

— Begin quote from ____

%url%丢失用户。 发表于 2013-8-29 17:26
哈哈,没事。那现在知道我的问题以后,有没有好的办法解决啊

— End quote

我没用过场景编辑器啊……

话说转化成UIWidget的话,(UIWidget*)这样强制转换可以么=。=

哎,怎么大家都不好好看看我问的问题就回答呢。。
楼上的朋友,
“mainWidget(mainWidget = CCUIHELPER->getWidgetFromJson)"是读取UI文件啊,
我现在是要读取场景文件,
场景文件是:
CCNode *pNode = CCSSceneReader::sharedSceneReader()->createNodeWithSceneFile(“scene.json”);

他得到的是一个CCNode类型的啊

你通过CCNode获得UI,然后再添加时间回调啊

怎么获得UI 看这个文档:
http://bbs.cocostudio.org/forum.php?mod=viewthread&tid=6497&extra=page%3D1

— Begin quote from ____

%url%小雨 发表于 2013-8-29 14:46
在编辑器里给button取名字,然后代码里getChildByName

— End quote

getChildByName 就可以了么

— Begin quote from ____

%url%国良 发表于 2013-8-29 16:06
getChildByName 就可以了么

— End quote

嗯哪,假设你把从json获得的根Widget叫做mainWidget(mainWidget = CCUIHELPER->getWidgetFromJson),那么里面的按钮就是UIButton* btn = (UIButton*)mainWidget->getChildByName(“btn23”);

就算这个按钮是被层层嵌套着的也没关系,找child的时候会递归地找下去的。

— Begin quote from ____

%url%丢失用户。 发表于 2013-8-29 10:57
求解答~在线等回复~~~

— End quote

在编辑器里给button取名字,然后代码里getChildByName

求解答~在线等回复~~~

楼上的,谢谢。不过你这是在能得到UIButton的前提下。可是我的问题就是不知道怎么从场景Node得到的UI Node中再得到这个UIButton

首先 要保证 UIButton touchenable 为True
增加响应事件回调 addReleaseEvent
最后 scheduleUpdate

CCComRender pUIRender = dynamic_cast<CCComRender>(m_pCurNode->getChildByTag(2)->getComponent(“GUIComponent”));
UILayer pUILayer = dynamic_cast<UILayer>(pUIRender->getRender());
UIButton pButton = dynamic_cast<UIButton>(pUILayer->getWidgetByName(“Button”));
CCLOG(“pButton name = %s”, pButton->getName());

— Begin quote from ____

%url%丢失用户。 发表于 2013-8-29 16:31
哎,怎么大家都不好好看看我问的问题就回答呢。。
楼上的朋友,
“mainWidget(mainWidget = CCUIHELPER->ge …

— End quote

看错了,我眼睛不好,近视……:dizzy:

— Begin quote from ____

%url%丢失用户。 发表于 2013-8-29 17:26
哈哈,没事。那现在知道我的问题以后,有没有好的办法解决啊

— End quote

我没用过场景编辑器啊……

话说转化成UIWidget的话,(UIWidget*)这样强制转换可以么=。=

你通过CCNode获得UI,然后再添加时间回调啊

怎么获得UI 看这个文档:
http://bbs.cocostudio.org/forum.php?mod=viewthread&tid=6497&extra=page%3D1

— Begin quote from ____

%url%小雨 发表于 2013-8-29 14:46
在编辑器里给button取名字,然后代码里getChildByName

— End quote

getChildByName 就可以了么