1、   概述

游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来。比如获得一件装备后人物形象的改变,或者战斗中武器、防具的损坏等。这些变化的实现就要通过动态换肤来实现。在接下来的这个Demo中,点击屏幕会动态更换小人手中的武器。先上图:

2、制作小人

首先我们先制作一个UI小人,并将显示资源绑定到骨骼上。有不太明白的同学,可以看看:Cocos2d-x 3.0开发(六)使用cocoStudio创建一个骨骼动画。我随便找了些资源,做出来大概是这样:

接下来我们想这样一个问题。武器是拿在手里的,当手移动时,武器当然要跟着动。因此武器与手之间是有关系的,即武器的状态会受到手的影响而改变。这实际上 就是父子关系。所幸cocoStudio中的骨骼支持这种操作,我们需要右击“武器骨骼”,在菜单中找到“绑定父关系”,点击后再点击它的父骨骼——我们 的“手臂骨骼”即可。

3、制作动画

制作动画的过程就没什么需要特别注意的了,大家自己发挥就成。我在这里制作了一个名为“go”的动作。

做完后将文件导出。

4、运行到程序

运行脚本,创建一个新项目。将导出文件复制到Resource中。

修改init的代码:

[cpp] view plaincopyprint?
  1. bool HelloWorld::init()
  2. {
  3. //
  4. // 1. super init first
  5. if ( !Layer::init() )
  6. {
  7. return false;
  8. }
  9. Size visibleSize = Director::getInstance()->getVisibleSize();
  10. Point origin = Director::getInstance()->getVisibleOrigin();
  11. ArmatureDataManager::getInstance()->addArmatureFileInfo("changeShape.ExportJson");
  12. Armature* arm = Armature::create("changeShape");
  13. arm->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
  14. arm->setTag(1);
  15. addChild(arm);
  16. arm->getAnimation()->play("go");
  17. setTouchEnabled(true);
  18. return true;
  19. }

编译运行,应能够看到动画播放。

5、 添加与更换皮肤

添加皮肤方式分动态添加与静态添加两种。动态添加是指在编辑器中更改,这样可以不需要重新编译程序。静态添加则是将其写死在程序中,通常这种做法不推荐,但我们也应该会使用。更换的做法是我们首先要取到具体的骨骼,然后更改它显示的“皮肤”。

5.1动态添加

在“动画编辑”的模式下选中我们的武器。然后将我们需要更换的武器资源依次拖动到“渲染资源”中。点开下拉列表,我们能看到添加过的资源,右击也可以删除。

添加好后,保存并导出。

在工程中,我创建了一个int的成员变量displayIndex。并在init中初始化为0。接下来我们加入点击响应来更换皮肤。

[cpp] view plaincopyprint?
  1. void HelloWorld::onTouchesEnded(const std::vector<Touch*>&  touches, Event* event)
  2. {
  3. ++displayIndex;
  4. displayIndex = (displayIndex) % 4;
  5. ((Armature*)getChildByTag(1))->getBone("weapon")->changeDisplayByIndex(displayIndex, true);
  6. }

5.2静态添加

使用静态添加有一点要注意:要保证创建的资源已经导出了。

我们在init中添加:

[cpp] view plaincopyprint?
  1. //……
  2. Skin* skin = Skin::createWithSpriteFrameName("sliderProgress.png");
  3. arm->getBone("weapon")->addDisplay(skin, 4);
  4. //……

并将点击响应中循环量从4更改为5。

编译运行即可看到效果。

6、总结

创建皮肤分为动态和静态两种形式。动态是将相应的资源直接导出。静态则是要写到代码中进行创建。虽然这种也是动态创建,但相较于json配置,我还是倾向于称它为“静态”。叫什么不重要,哪种方便用哪种。换肤则都是要取到对于的骨骼,然后更改显示。

Demo下载:http://download.csdn.net/detail/fansongy/6454703

本篇博客出自阿修罗道,转载请注明出处,禁止用于商业用途:http://blog.csdn.net/fansongy/article/details/13024265

转载于:https://www.cnblogs.com/dudu580231/p/4983710.html

实习小白::(转) Cocos2d-x 3.0 开发(八)骨骼动画的动态换肤相关推荐

  1. Cocos2d-x 3.0 开发(八)骨骼动画的动态换肤

    1.   概述 游戏中人物的状态会发生改变,而这种改变通常要通过局部的变化来表现出来.比如获得一件装备后人物形象的改变,或者战斗中武器.防具的损坏等.这些变化的实现就要通过动态换肤来实现.在接下来的这 ...

  2. Android插件化开发实现动态换肤

    今晚实在不想coding,于是想着整理点知识点,那么简单整理了下插件化开发实现动态更换皮肤.插件化开发大家应该不陌生或多或少用过或听过,插件化开发在项目业务拓展.模块化等方面有不小优势,当然实现一个完 ...

  3. vue3.0+ts+element-plus多页签应用模板:element-plus按需引入与动态换肤

    目录 系列链接 一.安装element-plus 二.按需引入 1. 为什么要按需引入? 2. 如何按需引入? 3. 验证是否引入成功 三.动态换肤 1. 制作自定义主题 2. 引入自定义主题 3. ...

  4. 实习小白::(转) cocos2d-x使用cocosStudio编辑的动画文件

    1CocoStudio 简介 CocoStudio 是由 Cocos2d-x 官方推出的一个专门针对 Cocos2d-x 游戏开发的免费工具集,目前正在开发阶段,且日益完善之中!既是工具集,当然集成了 ...

  5. Extjs4.0 开发笔记-desktop开始菜单动态生成方法

    desktop开始菜单动态生成方法: Desktop.html中,在<scripts>中的Ext.onReady之前添加如下: var mArr = [];//这里是保存显示模块的数组va ...

  6. 安卓app开发教程!Android动态换肤实现原理解析,值得收藏!

    开头 Android开发,假如开始没有任何的开发经验的话, 千万不要着急,不要想着在短时间内就把一个语言学习好, 因为你之前没有任何的学习经验, 在这个过程中需要有耐心地学习完JAVA的基础知识, 然 ...

  7. C++ QT结合FFmpeg实战开发视频播放器-13视频播放器换肤功能实现(1)背景属性添加

    视频播放器换肤功能实现(1)背景属性添加 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  8. 实习小白::(转) Cocos2d-x 3.0开发(五)关联程序逻辑与cocoStudio导出文件

    1.概述 上篇说到将CocoStudio的导出文件在程序中运行出来,但是并没有用户交互,即点击响应,程序的逻辑判断也都没有.这篇中我们把它们加进去,这样就可以算一个完整的程序了.先上个图: 运行后,点 ...

  9. 实习小白::(转) Cocos2d-x 3.0开发(十三)使用CocoStudio编辑帧事件并关联到程序...

    1.概述 帧事件也是新加入的功能.这篇中我们将看到如何使用它.我们将上篇中制作的动画稍加修改.有图为证: 2.用途与原理 首先介绍一下帧事件.正如其名:一个与帧相关联的事件. 为什么要这么做呢?首先没 ...

最新文章

  1. SAP HUM 如何查询一个HU号码是否被软分配给了某个销售订单 ?
  2. 生态学研究方法(一)
  3. 小程序开发(6)-之自定义导航栏
  4. Java 获取目录的大小
  5. CSS z-index属性
  6. matlab 画光束等相面,一种新型贝塞尔光束器件的设计方法
  7. java 文件下载 并发_高并发下载tomcat下的文件时,发生java.net.SocketException: Connection reset解决方案...
  8. 解决 css 浮动后 父元素高度失效问题
  9. cxonev4验证用户_欧姆龙plc编程软件下载 omron plc编程软件(CX-ONE) v4.31 中文免费版(附序列号+安装教程) 下载-脚本之家...
  10. 如何实现向APP推送消息
  11. 『拓扑排序』「NOI2010」航空管制
  12. WMS系统-库位准确率与单位面积存储率-北京东勤科技
  13. 雷霆战机的java代码_JavaSwing雷霆战机(飞机大战)源代码
  14. rxjava背压_Android RxJava :图文详解 背压策略
  15. vs2015开发在网页中调用的ocx控件详解(二)
  16. 42条微信营销小技巧!
  17. 迷宫问题(解救小哈)
  18. ZYNQ启动流程之分析BootRoM
  19. 网页设计基础(HTML)
  20. 怎样补充nmn,nmn胶囊正确服用方法,现在知道还不晚

热门文章

  1. 致可爱的仙女程序“媛“们
  2. 艺术之下,数学之中 | 数字艺术
  3. ppt模板文字处理方式有哪些?
  4. 【vue】增删查改练习
  5. 亚马逊中国站获取商品库存信息
  6. 828 选华为云,实惠更实用——为什么选择 CDN 的企业多?
  7. Python-drop_duplicates
  8. [渝粤教育] 武汉大学 水环境数学模型 参考 资料
  9. iPhone 7-b
  10. java中soap是什么,java中的soap的通讯