已解决:动态读取spine的SkeletonData

Cocos creator 组件 Skeleton 继续讨论:

jare引擎开发团队7月1日
请用 cc.loader.loadRes(’B/B’, cc.SkeletonData, function (…))

找了很久只看到上面帖子的回复,照做之后:

cc.loader.loadRes(‘Spine/nn’, cc.SkeletonData, function (err, spData) {
newNode.getComponent(‘sp.Skeleton’).skeletonData = spData;
});

但是场景中什么也没有。
模拟器没有报错。
使用浏览器有如下报错:

Uncaught TypeError: Object #<cc_Texture2D> has no method 'getRuntimeData' Skeleton.js:376
sp.Skeleton.cc.Class._createSgNode Skeleton.js:376
sp.Skeleton.cc.Class._refresh Skeleton.js:869
sp.Skeleton.cc.Class.properties.skeletonData.notify Skeleton.js:119
val.set preprocess-attrs.js:59
(匿名函数) CreatorUIController.js:378
(匿名函数) CCLoader.js:320
(匿名函数) CCLoader.js:236
(匿名函数) utils.js:48

_createSgNode: function () {
if (this.skeletonData/* && self.atlasFile*/) {
if (CC_JSB) {
var uuid = this.skeletonData._uuid;
if ( !uuid ) {
cc.error(‘Can not render dynamic created SkeletonData’);
return null;
}
var jsonFile = this.skeletonData.rawUrl;
var atlasFile = this.skeletonData.atlasUrl;
if (atlasFile) {
if (typeof atlasFile !== ‘string’) {
cc.error(‘Invalid type of atlasFile, atlas should be registered as raw asset.’);
return null;
}
return new sp._SGSkeletonAnimation(jsonFile, atlasFile, this.skeletonData.scale);
}
}
else {
var data = this.skeletonData.getRuntimeData();
if (data) {
return new sp._SGSkeletonAnimation(data, null, this.skeletonData.scale);

**_Uncaught TypeError: Object #<cc_Texture2D> has no method 'getRuntimeData'_**

            }
        }
    }
    return null;
},

这个报错应该是数据有问题吧,麻烦看看前面有没有其它报错?能不能调试下 spData 加载后是什么类型?是否有 err?
还可以参考自带范例中的 AssetLoading 场景检查一下。里面有动态加载 spine 并显示的范例。

多谢 已经解决
之前主要看里面的spineboy没注意到,,
是 cc.SkeletonData的锅,应该是 sp.SkeletonData,,之前的回答有问题

谢谢,回答已修改。

請問一下!
這裡我的做法是用andorid原生的下載並儲存到 getCocos2dxWritablePath()
再由腳本實際生成
但是一直報 [Can not render dynamic created SkeletonData] #7504 的系統錯誤
請問 這裡我是缺乏什麼呢?

var LoadFilePath = jsb.fileUtils.getWritablePath() + ‘/monster/monster05’;
var paths = [LoadFilePath + ‘.png’, LoadFilePath + ‘.atlas’, LoadFilePath + ‘.json’];
cc.loader.load(paths, function (errors, results) {
if (errors) {
cc.log(‘errors:’ + JSON.stringify(errors));
} else {
console.log(results);
console.log(results.getContent(LoadFilePath + ‘.png’));
console.log(results.getContent(LoadFilePath + ‘.atlas’));
console.log(results.getContent(LoadFilePath + ‘.json’));
var child = new cc.Node();
child.addComponent(sp.Skeleton);
var asset = new sp.SkeletonData();
asset.skeletonJson = results.getContent(LoadFilePath + ‘.json’);
asset.atlasText = results.getContent(LoadFilePath + ‘.atlas’);
asset.atlasUrl = LoadFilePath + “.atlas”;
asset.textures = [LoadFilePath + ‘.png’];
// asset.textures = [results.getContent(LoadFilePath + ‘.png’)];
// asset.textures = [“http://mosaandnasa.com/Cocos-hotfix/spine/monster05.png”];
child.getComponent(sp.Skeleton).skeletonData = asset;
child.position = cc.p(0, 0);
child.scale = 0.6;
self.node.addChild(child);
// console.log(asset);
child.getComponent(sp.Skeleton).setAnimation(0, ‘idle’, true);
};
})

備註一下:同樣的寫法換成網址 跑 瀏覽器是可以順利執行動畫的

以下是我的猜測 問題發生點:
if ( !uuid ) {
cc.error(‘Can not render dynamic created SkeletonData’);
return null;
}
但是我又該如何解決才好?