cocos2dx csb动画换装的问题

cocos2dx 3.x版本,.csb骨骼动画实现换装功能,依旧是扒来的,好东西要分享:

隔了段时间,重拾cocos2dx,发现版本变化太大了...cocos studio 到已经从1.x时代升级到2.x时代了. 
昨天想把以前的代码在新版本下重来一次,发现在cocos studio上无法导出.ExprotJson格式的骨骼文件,抱怨下cocos的向下兼容能力..


折腾了好久,弄明白了新的.csb的加载方式,骨骼动画也跑起来了,但问题来了,换肤功能怎么办?论坛上也发了个帖,没回复,只能自己研究了.


搜索了下资料,都是以前.ExportJson的换肤方式,无奈只能看看Cocos stuudio每个版本到底更新了什么,也终于在 


http://www.cocoachina.com/cocos/20150909/13380.html 


发现了头绪;


在技术方面,为使用户能够更为简便地进行骨骼动画编辑,cocos v2.3.2实现了换肤功能,用户通过简单的界面操作,即可完成骨骼动画的图片替换。同时,cocos团队将反向动力学应用到了骨骼动画的制作中,只要确定子骨骼的位置,就能够反求推导出其所在骨骼链上n级父骨骼的位置,进而确定整条骨骼链。此外,cocos v2.3.2版本还设置了骨骼动画碰撞的区域,贴心十足。


简单的理解,骨骼动画的每个节点都可以对应到程序代码的Node节点,分层次的...这样来看,就可以通过控制childNode来改变.  思路有了,代码操作.


动画素材选择:DemoPlayer.csb 就是大家熟悉的牛仔图.


代码片段(骨骼动画的最简单代码,官方教程):

 auto rootNode = CSLoader::createNode("DemoPlayer.csb");//传入Studio2.x的资源路径
    this->addChild(rootNode);//假设this是即将显示的scene

    auto action = CSLoader::createTimeline("DemoPlayer.csb");   //加载动画:
    rootNode->runAction(action);//注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。
    action->gotoFrameAndPlay(0,true);//播放动画:


运动播放控制:
搜索.csb格式骨骼文件使用的过程中,发现也有不少人问题怎么按以前的动作名称控制播放哪种动画;
这里提供2种方式;
一种,按帧控制;比如
action->gotoFrameAndPlay(0,50,true);   //播放0到50帧的动画
一种,按Name控制,这种方式需要在Cocos Studio设置骨骼动画的分段名称,比如设置0到50帧为“run”;


 action->play("run", true); //播放“run”动画


换肤:
直接上代码:
auto rootNode = CSLoader::createNode("DemoPlayer.csb");//传入Studio2.x的资源路径
this->addChild(rootNode);//假设this是即将显示的scene



auto button =rootNode->getChildByName("Layer15")->getChildByName("Layer19"); //获取要换肤的骨骼节点
    button->removeChildByName("testAnimation1"); //去掉该骨骼阶段下的子节点 
auto sprite1 = Sprite::create("effect_1.png");   
    button->addChild(sprite1);  //添加骨骼节点下的新字节点


auto action = CSLoader::createTimeline("DemoPlayer.csb"); //加载动画:
rootNode->runAction(action);//注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。
action->gotoFrameAndPlay(0,true);//播放动画:


执行看看,是不是换掉了,为了测试,我换掉的是手臂...牛仔变杨过的感觉;其实如果真的要变杨过,直接 removeChildByName,不添加新的child即可;


当然更形象点,我们也可以直接添加skin节点,效果是一样的;

auto skin = cocostudio::Skin::create("effect_1.png");
button->addChild(skin); 


换肤终于完成了,自己瞎琢磨出来的,哪位大大有更好的方法,请提供下,谢谢了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值