SPINE在setSkeletonData时报错

  • Creator 版本:2.3.2

  • 目标平台:

  • 详细报错信息,包含调用堆栈:
    spine.js:3616 Uncaught TypeError: Cannot read property ‘length’ of undefined
    at new Skeleton (spine.js:3616)
    at sp_Skeleton.setSkeletonData (Skeleton.js:534)
    at ZeusChessItem.ChangeIcon (assets\scripts\game\zeus\items\ZeusChessItem.ts:33)
    at ZeusView.BaseGameView.SpinOne (assets\scripts\game\base\views\BaseGameView.ts:339)
    at ZeusView.BaseGameView.Spinning (assets\scripts\game\base\views\BaseGameView.ts:312)
    at ZeusView.BaseGameView.update (assets\scripts\game\base\views\BaseGameView.ts:266)
    at eval (eval at createInvokeImpl (cocos2d-js-for-preview.js:1), :3:65)
    at CCClass._invoke (component-scheduler.js:224)
    at CCClass.invoke (component-scheduler.js:189)
    at CCClass.updatePhase (component-scheduler.js:509)

  • 重现方式:使用sp.skeleton的setSkeletonData函数设置SkeletonData时报错

  • 之前哪个版本是正常的 :未测试

  • 手机型号 :

  • 手机浏览器 :

  • 编辑器操作系统 :windows

  • 编辑器之前是否有其它报错 :无

  • 出现概率:100%

  • 额外线索:
    如果直接赋值则不会出错,sp.skeleton.skeletonData = skeletonData;
    原因:skeleton的bones在_skeletonjson下

你这个是传入的对象类型不对了,可以提供下加载代码看看。

SpineBug.zip (1.0 MB)

我上传了,你可以看看这个实例,我发现直接赋值和调用函数走的不是一个流程。问题已经定位,就是在setSkeletonData函数中,会去取SkeletonData中的bones,但是我看skeletondata的骨骼在skeletonData._skeletonJson.bones。但是在函数中是直接取的skeletonData.bones。导致遍历骨骼时,找不到bones数组而遍历失败

没错的,你跟踪代码也能发现,应该通过赋值来更新数据。