2.0.7 spine 对象移除后重新使用的情况下会出现奔溃,以及贴图错乱的表现

测试环境:ios,android,PC模拟器

spine 对象移除后重新使用的情况下会出现奔溃,以及贴图错乱的表现。

奔溃堆栈信息:

贴图错乱表现:

Demo:
Demo.zip (1.1 MB)

经排查,removeFromParent、removeChild 是奔溃的罪归祸首,但很多场景不得不用它。
使用parent可以降低崩溃的概率,错乱表现依旧存在。

表现错乱出现的规律,通常是在一个对象从节点移动到另外一个节点时(即是一个对象经过缓存池,反复使用时)

花了很长时间排查问题,才得以用Demo复现出来的,项目紧急,求助。
具体请看例子中的代码,有注释。

@jare @panda @Knox @huanxinyin

自己顶起,求关注

顶一顶,求关注

了解一下removeFromParent的参数含义,要复用的node你传true肯定有问题,传false应该就没问题。要实现对象池参考下官方的https://github.com/cocos-creator/engine/blob/eff43cc656979bee32e745f898d33cb330778428/extensions/ccpool/CCNodePool.js#L76

传false也会崩溃

崩崩崩,无论removeFromeParent怎么传参都不应该引起奔溃,例子只是用于复现奔溃的问题,开发中会根据实际情况选择传参。

你好,关于spine切换父节点,纹理不正确的问题,已经修复
https://github.com/cocos-creator/cocos2d-x-lite/pull/1659
这个pr是在spine升级的基础上修改的,所以如果合并,就合并这个pr修改的那几行代码即可,
不要合整个分支,牵扯比较庞大,谢谢。

至于您反馈的crash的问题,我这边创建了100个动画,跑了一个多小时,没有重现



您可以试着合并我发的pr修复,看是否还存在crash的问题。

1赞

Ipad 奔溃视频
https://pan.baidu.com/s/1w1xfpGApSvrOhn8pjBCYuA

iphone 奔溃视频
https://pan.baidu.com/s/1H0_VvtLL1tQWnlNwxAzrbQ

这个Demo跟之前的是一样的,确保有不一致的地方,请重新下载
直接运行Demo马上就能复现奔溃(6秒):
Demo.zip (1.1 MB)

刚刚测试了,spine切换父节点的会导致crash的问题,这个pr已经修复了,你把这个pr上对应修改的那几行代码合到你本地的cocos2d-x-lite对应的文件上,就OK了,这个pr也同时修复了纹理出错的问题,感谢反馈。
https://github.com/cocos-creator/cocos2d-x-lite/pull/1659

1赞

@sunnylanwanjun 请问大佬你提交到那个分支上面的呀?我目前能看到的你最新的提交时#1652的,求指点

我提交到v2.0-release分支的,不要合整个分支,因为这个分支包含了spine升级的内容,合并起来文件很多,你只需要把我发的那个提交对应修改的代码拷贝你的cocos2d-x-lite对应的类方法中就好了。

好的,谢谢大佬

直接改下安装目录下的cocos2dx目录c++文件就好了吗,不用改engine目录文件吗

对,不需要改engine

2.0.8版本什么时候出呢?

修复这个Bug的版本什么时候发布呀?
2.0.9什么时候放出来?

近期,开始测试了,耐心等待