求助,小程序线上spine老是报内存泄露怎么处理呢

cocos版本:2.4.11
Maximum call stack size exceeded

RangeError: Maximum call stack size exceeded

at e.applyRotateTimeline (https://usr/engine/game.js:4429:1181824)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1181381)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

at e.applyMixingFrom (https://usr/engine/game.js:4429:1180232)

本地试了很多次都没有重现,线上却一直有出现报错

@jare

这不是内存泄露,这是调用栈溢出

试试弱网环境能不能复现,还有这个是程序中的调用堆栈溢出,常见的是程序死在了递归调用或者循环调用中,不是内存泄漏

是的,是溢出,我描述有误

我看了源码是spine 里面死递归了,这个应该和弱网环境没什么关系吧

遇到同样问题,有解决方案么

不要在start,onLoad这种生命周期函数中直接播放动画,改成延时一帧去播。

我随便猜的哈,可以试试看

我这边也出现了applyMixingFrom 失败的问题,原因是待机动画只有一帧,猜测是当一个动画过渡到待机动画时,spine混合机制导致无法计算1帧的混合时间。最后将待机动画改成2帧以上解决的。

1赞

没有待机动画,只是同一个动画循环反复播放也会出现这个递归死循环,后面加了延迟一帧渲染,并没有解决。

直接强行把源码里死循环部分删了…好像也没啥影响.上线好久了.

所以只能这样改源码了?

可以把spine的缓存模式改一下,不要用REALTiME模式,这个模式就有可能有那个问题

一帧的动画不能混合. 必卡死.