cocos2dx-3.2中引用场景编辑器资源并与控件和UI交互

之前看了版主的《CocoStudio sample讲解SamplesSceneEditor场景编辑器》的教程(链接:http://www.cocoachina.com/bbs/read.php?tid=194073),发现有点老,在3.2下面代码是不能用的。
今天我为大家带来3.2的引用场景编辑器资源并与控件和UI交互的教程。

首先:我们要有一个在场景编辑器下编辑好的资源。我们先来看我的场景编辑器的资源的结构:
图片的右上角(图片在最下面)

Node1是一个骨骼级件,tag值为10005;
bg是一个UI编辑器的一个资源,tag值为10003;
Node2是一个骨骼级件,tag值为10004,剩下的三个Node就不说了

这里说下他们的关系,Node2是bg下面一个资源,而Node1和bg是同一层关系,这个很有用,下面将说到。

然后:
1、将场景编辑器的资源加载到程序中:

auto layer = SceneReader::getInstance()->createNodeWithSceneFile("publish/Scene_chater1.json");
layer->setPosition(Vec2::ZERO);this->addChild(layer);

2、获取UI编辑器的资源,就是我们的bg:

ComRender* bg = (ComRender*)(layer->getChildByTag(10003)->getComponent("GUIComponent")); 
Widget* bgLayer = static_cast<Widget*>(bg->getNode());  //转化为一个Widget,为了获取UI编辑器里的控件用

取得UI编辑器资源里的一个控件,

LoadingBar* bar_exp = (LoadingBar*)Helper::seekWidgetByName(bgLayer, "bar_exp"); //想必这一句大家都懂吧,“bar_exp”就是UI编辑器资源里的那个控件的名字
bar_exp->setPercent(10.0);

3、获得骨骼控件,就是这里的Node1:

ComRender *leftBtn_render = (ComRender*)(layer->getChildByTag(10005)->getComponent("CCArmature")); CCArmature *leftBtn = (CCArmature*)(leftBtn_render->getNode()); leftBtn->getAnimation()->play("Animation1");

4、获取bg下面的骨骼控件,就是这里的Node2:

ComRender* rightBtn_render = static_cast<ComRender*>(layer->getChildByTag(10003)->getChildByTag(10004)->getComponent("CCArmature"));
Armature* rightBtn = (Armature*)(rightBtn_render->getNode());
rightBtn->getAnimation()->play("Animation1");

因为Node2是bg下面的一个对象,所以要这样写。

下面我们来讲解下为什么要这样写,这和JSON是有关系的,我们打开从场景编辑器导出的资源,就是那个场景的json,看图。

10005和10003是同一层关系,而10004则属于10003下面的一个元素,10004下面有四个gameobjects,这也和我们的结构相同。
10004下面还需要getComponent一下,那个大红框框就表示10004下面的component,那个name就是“CCArmature”。

:2::2::2::2::2:

你好,下面这个语句如果不用auto声明,应该用什么?
auto layer = SceneReader::getInstance()->createNodeWithSceneFile(“publish/Scene_chater1.json”);