dragonBones动画换皮web中能换成功模拟器不可以

在获取到骨骼动画节点后,调用换皮函数,如下:
swith: function(changname,decname) {
var image = dragonBones.CCFactory.getFactory().getTextureDisplay(head_change,“Act_1”);//创建新的图片用于换装
//if(!image) return;
var slot = this._armature.getSlot(“head”);
if(!slot) return;

    slot.setDisplay(image);//替换插槽的显示对象
},

在浏览器中换皮成功,可以实现,但是在win下和anroid下 ,在获取
var image = dragonBones.CCFactory.getFactory().getTextureDisplay(head_change,“Act_1”);//创建新的图片用于换装
这个image的时候获取图片为空 导致无法换皮。。。。。
追源码到应该是图片集没有找到。但是我的head和head_change 都是做在骨骼动画里面的,同时图片都在一个plist中
,为什么在浏览器中能找到,在其他平台上无法找到呢?

谢谢解惑。。。

在此输入链接描述

这个工程文件
链接:http://pan.baidu.com/s/1jI6wY7G 密码:3dhx

调 setDisplayIndex(n) . 在插槽里放好若干个图,做index切换.
原因是 web和app上是两套实现, web上功能基本齐全怎么用怎么好,但 到了 app的c++库上就坑了…

至少我是这么做的,.

现在也没个什么龙骨文档, 白鹭上的龙骨文档仅供参考而已.

小白一个,如有说错,求大神轻拍~~~

1赞

其实并不是说完全两套实现。而是因为 C++ 库要在 js 层调用中间涉及到 js-binding。这里遇到的问题可能是某些接口或者属性没有 js-binding。具体原因我等下排查一下。

1赞

@neween 我拿你的项目测试了下。先放出解决方案吧:

  • 首先,js-binding 的代码中有个小问题,请参考 这个PR 本地修复一下,或者等下个版本发布。

  • 然后,switch 函数的代码需要做如下修改:

    swith: function(changname,decname) {
        // 获取组件中的 factory 对象来使用,而不是直接使用 dragonBones.CCFactory.getFactory()
        var factory = this._armatureDisplay._factory;
        var image = factory.getTextureDisplay(changname,"Act_1");//创建新的图片用于换装
        //if(!image) return;
        var slot = this._armature.getSlot(decname);
        if(!slot) return;

        // setDisplay 接口需要传一个 DisplayType 的参数,以保证 jsb 环境正常工作
        slot.setDisplay(image, dragonBones.DisplayType.Image);//替换插槽的显示对象
    },

下面具体分析一下问题原因:

  1. 在组件层(dragonBones.ArmatureDisplay 这个类)中,web 和 jsb 使用的 CCFactory 对象是不一样的。web 使用的是 dragonBones.CCFactory.getFactory() 这个单例。而 jsb 是每个组件 new 了一个 CCFactory 对象。参考组件源码

  2. 在 DragonBones 的 runtime 层,Slot 的 setDisplay 接口参数是不一样的。在 web runtime 中,setDisplay 只有一个参数。而 cpp runtime 中,还需要再传入一个 DisplayType 的参数。

谢谢。这边测试可用!辛苦!
现在就是直接替换插槽之后 新替换的Display 会位置偏移,这个问题也在别的帖子看到了,绑定5。0之后会解决这个么?

目前这种办法只能把所有换图资源全部编译到龙骨文件中,是否有提供对外接口 传入cocos creator的 display的纹理 替换插槽中factory.getTextureDisplay获取的纹理,这样在大量复制角色和换皮的操作中可以复用龙骨骨架。

请问getTextureDisplay方法里面的两个参数 具体是指什么意思呢