图上是两个空的骨骼组件,想在骨骼组件里添加帧动画就是连续的帧的动作动画。
是要在代码里给这两个动画组件附上动画。
应该怎么在代码里给这两个空的组件赋值,这个场景每次进来时,那两个组件里面的角色是不同的。
说简单点,就是这个场景,这两个空间,用代码来给他俩添加动作编辑器里编辑出来的动作。
您好,您的问题可以通过下面的方法解决:
CCNode *pNode = SceneReader::sharedSceneReader()->createNodeWithSceneFile("scenetest/ArmatureComponentTest/ArmatureComponentTest.json");
CCComRender *pBlowFish = static_cast<CCComRender*>(pNode->getChildByTag(10007)->getComponent("CCArmature"));
CCArmature *Ar = static_cast<CCArmature*>(pBlowFish->getNode());
//先加载armature
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo("Cowboy0.png","Cowboy0.plist","Cowboy.ExportJson");
//初始化到节点
Ar->init("armature 的名字");
版主这好像不行啊CCArmature Ar = static_cast<CCArmature>(pBlowFish->getNode());
报错,因为动画组件是空的~~这样取就报错了啊
您好,您是直接复制的么?如果是的话把编号一定要改成自己的哦~~pNode->getChildByTag(10003)->getComponent(“CCArmature”)
是我自己的编号的,但那地方还是出错啊
auto armature = (ComRender*)node10003 -> getComponent(“CCArmature”);
pkscene = (Armature*)armature -> getNode(); 我是这样的,上面那句没问题过了,到下面这
pkscene = (Armature*)armature -> getNode(); 这句就报错了
版主帮忙啊!!我又测试了好几次!图中左面的是10003,右面的是10004
然后我吧10004上放上帧动画,我用
auto armature = (ComRender*)node10004 -> getComponent(“CCArmature”);
pkscene = (Armature*)armature -> getNode();
这就没错,因为里面有帧动画
然后把10004换成10003取得就出错
pkscene = (Armature*)armature -> getNode();
好像因为那个动画的
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo(“Cowboy0.png”,“Cowboy0.plist”,“Cowboy.ExportJson”);
这个没在里面无法判断是Armature???
你可以换个方法,不在场景编辑器里面创建骨骼组件只创建俩个空对象。在程序里动态创建骨骼组件然后挂到对象上。
ArmatureDataManager::getInstance()->addArmatureFileInfo(“HeroAction/heroAction.ExportJson”);
auto node10003 = node -> getChildByTag(10003);
pkscene = Armature::create(“heroAction”);
node10003 -> addChild(pkscene);
同样是空的骨骼组件,我用这个方法可以放上去
但是我担心放上两个空的组件,然后再这样给这个node挂上动画浪费资源。。。。
auto armature = (ComRender*)node10003 -> getComponent(“CCArmature”);
上面这句就没用了
因为是用cocostudio放的动画组件,所以想直提取组件后往里放动画。
liyingtu 你好:
你的需求是 在场景里面标示出node的位置,然后再程序加载的时候 再添加组件 可以这样写
node1; //在场景编辑器CCNode1
node2; //在场景编辑器CCNode2
CCArmatureDataManager::sharedArmatureDataManager()->addArmatureFileInfo(动画编辑器导出的json文件);
CCArmature*pAr = CCArmature::create(动画的名字);
CCComRender *render = CComRender::create(pAr, 给CComRender取组件的名字);
node1->addComponent(render);
node2->addComponent(render);
这样即可
谢谢!
node1; //在场景编辑器CCNode1
node2; //在场景编辑器CCNode2
你说的这个思路提醒了我,我在cocostuido里面直接拖的边上的组件,但
是这些组件都是做好的在node对象上的,我刚在组件上右键发现可以删除node上的组件
删除组件后就变成一个单纯的node对象,才知道原来cocostudio上拖下来的组件是和node对象在一起的
没有单独创建node的对象。
你写的代码在对象上在加组件就应该没问题了。
再次感谢!
我6楼写的就是8楼的意思 
也谢谢你!
呵呵有代码看着能更好理解