spine+NodePool 的bug

  • Creator 版本: 3.4.2

  • 目标平台: Mac chrome

  • 重现方式:必现

  • 首个报错:
    simple.ts:627 Uncaught RangeError: offset is out of bounds
    at Uint16Array.set ()
    at realTimeTraverse (simple.ts:627:15)
    at updateComponentRenderData (simple.ts:291:9)
    at Object.updateRenderData (simple.ts:228:13)
    at Skeleton.updateAssembler (renderable-2d.ts:401:30)
    at Batcher2D.walk (batcher-2d.ts:661:20)
    at Batcher2D.walk (batcher-2d.ts:677:22)
    at Batcher2D.walk (batcher-2d.ts:677:22)
    at Batcher2D.walk (batcher-2d.ts:677:22)
    at Batcher2D.walk (batcher-2d.ts:677:22)

  • 之前哪个版本是正常的: 2.x 正常

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:Mac

  • 重现概率: 100%

一个预制体包含一个spine动画,反复切换场景,退出时预制体put到NodePool,进入时重新get出来加载,加载的时候spine所引用的动画资源会发生变化)第一次进入是新创建的预制体就没有问题,第二次进入是从NodePool里get出来的,如果动画资源有变化 就会出现错误(比如两个spine文件 一个是 hero_1 一个是hero_2),第一次加载的时候指向hero_1动画数据(this.skeleton.skeletonData = hero_1_data),切换场景再回来的时候从nodepool get出来 然后指向hero_2动画数据(this.skeleton.skeletonData = hero_2_data)

spine不要用pool,用完直接干掉~ :nerd_face:不要问为什么,我也不知道~

spine.node.active=false;
spine.destroyRenderData();
spine.skeletonData=data;
可以参考这个方案先避过这个问题,这个问题在新版本已经修复了

好的,感谢。

image 我为啥还报这个错呢

具体是什么版本呢?不一定是一个问题

3.7.1

具体描述一下问题?

跟他的问题一样。我现在先设置skeletonData,再addChild好像没报错了,但是先addChild再设置skeletonData就有问题


这里有个类似的帖子,你可以先试试是否能暂时解决,我们先排查一下

3.7.4也遇到offset is out of bounds这个问题了~~而且很容易出现~以前3.7.3也没有这个问题的

谁有这个的必现路径哦,3.6.1暂时重现不了