【龙骨】dragonBones换装

版本 creator v1.4.2
龙骨版本是 v4.5

换装的需求一般有3个
1,骨架动作是一样的,只需要替换插槽上的静态图片资源
2,插槽的位置等信息不一致,直接替换插槽
3,插槽上挂一个龙骨动画 即 动画套动画

目前需求1是无法实现的,询问了creator开发者,给出的答案是需要等到龙骨的runtime升级到5.0才可以实现,询问了龙骨的开发者 大概需要到7月份才能更新runtime,所以只能等,或者大神自己实现了,目前我的做法是直接用需求2来处理,这样带来的问题是会有一点额外的开销

需求2,调用的函数是 factory.replaceSlotDisplay(dragonBonesName, armatureName, slotName, displayName, slot, displayIndex)
这里又有2个问题
display.armature().getSlots(); 获取当前骨架动画的所有插槽 和 factory.replaceSlotDisplay 这2个函数是没有导出native的,所以如果项目需要兼容native 需要自己导出,自动绑定会有问题,所以需要手动绑定jsb

需求3,这个官方例子合集里面有,可以参考
slot.childArmature = factory.buildArmature(part,name);
这里有一个问题是,如果之前这个插槽上已经设置了静态图片,直接设置childArmature的话可能会造成位置异常,所以最好是先清空再设置

8赞

能给上下demo么?学习下

。。我现在也遇到这个问题,需要静态替换图片,,能发个DEMO给我吗~

可以发个demo 学习下么

这两天准备自己绑定相关函数,弄好了 会发一个demo上来,目前getslots已经绑定
https://github.com/cocos-creator/cocos2d-x-lite/pull/1086
replaceSlotDisplay比较复杂 还没搞定 @dumganhar @jare 能给点帮助吗

1赞

这个强,可惜你用的是龙骨,求spine实作

replaceSlotDisplay 绑定已经更新
目前还有一个问题就是 需求3里面说的
如果之前这个插槽上已经设置了静态图片,直接设置childArmature的话可能会造成位置异常,所以最好是先清空再设置
在h5上 我直接slot.display = null 就可以了但是我发现在native上 不能直接调用.display这种方式
要用setDisplay(value,displayType) 这就有点坑了 h5和native的api居然不一致。。心累

跟spine一样的,H5上的实作跟native里的不一样
我为了要让spine的Slot消失,自已改了C++代码

大佬 请问你实现在原生平台 使用SpriteFrame 来进行换装吗,能发下代码吗, headSlot.setDisplay(spriteFrame1,dragonBones.DisplayType.Image)这段代码只在浏览器平台生效

slot.setDisplay这个函数应该有,你发下报错是什么?可以试下把dragonBones.DisplayType.Image直接换成0试下

creator 版本1.9.1,按照上面的修改了c++的replaceSlotDisplay和getSlots,编译运行之后图片有偏差,要替换的插槽是在骨骼原点,想问下你那边不偏差的嘛,或者是有什么地方需要注意的。

var slot = this._armature.getSlot(strSlotName+“Slot”);
if(!slot) return;
this._factory.replaceSlotDisplay(“zhujue”,“test11”,“qishijan”,“zhujue/qishijian”,slot);

我这里没这个问题,替换的slot和被替换的slot的原点,保持一致的话应该不会有这个问题,你可以看下是不是原点不一致导致的

克隆的原件,然后把要替换的slot单独拉出来,放入新的图片,对好位置,还是有偏差

你这里是替换了texture吧?这个我没试过,好像是会有位置的问题 这个只能你自己调试了 帮不了你

这个应该是替换的是插槽吧,对了我像问下原点是坐标还是锚点

请问你试过APP原生平台吗 具体代码是怎么实现的呢?

你好,是原生平台哦 headSlot.setDisplay(spriteFrame1,0),用这段代码不能替换卡槽图片 而且原本的卡槽图片还会消失

能发个demo学习下吗?

吃瓜群众,坐等demo学习

let slot = armature.getSlot(“weapon”);
factory.replaceSlotDisplay(“dragonBonesName”, “armatureName”, “slotName”, “displayName”, slot);

请问官方提供的这两个,为什么在里面报错!~