外部导入资源创建骨骼动画(dragonbones)

骨骼动画的资源如下:

若将资源放置于resources,中

可直接通过代码创建

     var self = this;
    // dragonbones 是 resources 文件夹中存放 DragonBones 资源的文件夹名称
    cc.loader.loadResAll('dragonbones', function (err, assets) {

        cc.log('骨骼动画资源:' + assets);

        let node = new cc.Node('1213');
        self.node.addChild(node, 99999);
        node.setPosition(cc.p(200, 200));
        let armatureDisplay = node.addComponent(dragonBones.ArmatureDisplay);

        for (let i = 0; i < assets.length; i++) {
            if (assets[i] instanceof dragonBones.DragonBonesAsset) {
                armatureDisplay.dragonAsset = assets[i];

                 cc.log('dragonBones.DragonBonesAsset ' + i + ' :'+ assets[i]);
            }

            if (assets[i] instanceof dragonBones.DragonBonesAtlasAsset) {
                armatureDisplay.dragonAtlasAsset = assets[i];

                cc.log('dragonBones.DragonBonesAtlasAsset ' + i + ' :'+ assets[i]);
            }
        }
        armatureDisplay.armatureName = 'mecha_1502b';
        armatureDisplay.playAnimation('idle', -1);
    });

资源在setttings.js中记录为:

        "1576a513-515f-4a0f-abd9-4d8879622d16": [
            "resources/dragonbones/CoreElement_texture_1.json",
            "dragonBones.DragonBonesAtlasAsset"
        ],
        "a6ffc54a-4de1-44f0-aff7-c225179f14f8": [
            "resources/dragonbones/CoreElement_texture_1.png",
            "cc.Texture2D"
        ],
        "8bdf6102-832f-4503-b145-19d9e2c3d364": [
            "resources/dragonbones/CoreElement_texture_1",
            "cc.SpriteFrame",
            1
        ],
        "8dcba141-f8a4-4c16-bf0d-76f1cfd53345": [
            "resources/dragonbones/CoreElement.json",
            "dragonBones.DragonBonesAsset"
        ],

但我需要用外部导入的资源创建骨骼动画,资源放置于项目外,通过cc.loader.load()获取资源。但这样获取到的资源是三个文件:

求问大神有没有办法将资源转为骨骼动画要求的资源格式,或者有没有其他可以创建骨骼动画的方法~

1赞

没太理解你的项目外资源是指什么?你说的情况是在 web 环境下吗?

不是,原生环境下,资源是下载后通过cc.loader.load()从本地获取的,并不放在resources目录下。
现在资源可以获取到,是json文件及png图片,类型不对,没有办法直接用来设置骨骼动画。

            //获取骨骼动画所需资源
            var dragonSprite = new cc.SpriteFrame(globalAsset['CoreElement_texture_1_png']);
            dragonSprite.name = 'CoreElement_texture_1';

            var dragonBonesAssets = [globalAsset['CoreElement_texture_1_json'], globalAsset['CoreElement_texture_1_png'], globalAsset['CoreElement_json'], dragonSprite];

            cc.log('dragonBonesAssets中内容为:' + dragonBonesAssets);

Simulator: dragonBonesAssets中内容为:[object Object],[object Texture2D],[object Object],[object SpriteFrame]

我也尝试了您之前发帖讲的这个方法,但是有报错
Error: js_cocos2dx_dragonbones_BaseFactory_parseDragonBonesData : Error processing arguments

// 以下代码只能在 JSB 环境正常运行:
this.factory = new dragonBones.CCFactory();
this._dragonBonesData = this._factory.parseDragonBonesData(dragonBonesJsonString);
this._factory.parseTextureAtlasData(atlasJsonString, imageFilePath);
var dragonBonesNode = this._factory.buildArmatureDisplay(armatureName);

只有debug时才能显示动画,而且图片显示不全。不知道怎么回事。我的spine包涵.png .plist .atlas ,

这个方法可能只适用于资源文件在项目中的情况,你的资源文件是下载到哪个位置的呢?可能会找不到相应的资源…

1赞

大哥,你歪楼了。这个帖子在讨论 DragonBones 的问题。

你的 spine 资源中是否使用了 mesh 呢?Creator 1.4 版本才刚刚支持了 spine mesh 的显示。

网上下载的骨骼动画,应该使用了mesh。请大神帮我看看压缩文件.zip (976.9 KB)

看起来应该是资源(3.0版本)与 runtime 版本(Creator 1.3 中是 2.x 版本,1.4 升级到了 3.5 版本)不匹配的原因。

最终还是用您之前说的一个方法解决了,果然是我太愚昧。

附上解决方法:

            cc.log('=======骨骼动画开始加载================');

            var dragonBonesData = JSON.stringify(globalAsset['CoreElement_json'])

            var textureAtlasData = JSON.stringify(globalAsset['CoreElement_texture_1_json'])

            this._factory = new dragonBones.CCFactory();

            this._dragonBonesData = this._factory.parseDragonBonesData(dragonBonesData);
            this._factory.parseTextureAtlasData(textureAtlasData, '/Users/yamato/Documents/ilive-package/res/dragonbones/CoreElement_texture_1.png');

            var dragonBonesNode = this._factory.buildArmatureDisplay('mecha_1502b');

            dragonBonesNode.animation().play('idle', -1);

            this.node._sgNode.addChild(dragonBonesNode);

            cc.log('=======骨骼动画加载结束================');
2赞

我们这边是用flash制作的骨骼动画,文件为:

请问大神有办法实现这种文件类型的骨骼动画吗

DragonBones 的骨骼动画在导入creator中会出现明显的层级问题,在DragonBones 中显示正常的贴图,在creator中会出现层级错乱,几个贴图之间有明显的“线”;这个问题怎么解决啊

大牛你好,那如果从web加载龙骨创建是怎样创建呢?谢谢