2.4.0,spine 原生无限报错bug

  • Creator 版本:2.4.0

  • 目标平台: Android

  • 重现方式:动态创建一个node,添加spine组件, 模式设置为SHARED_CACHE,然后添加到一个隐藏节点上,添加一个按钮事件destroy 掉这个spine. 就会出现
    E/jswrapper: ERROR: Uncaught TypeError: Cannot read property ‘animation’ of null, location: jsb-adapter/jsb-engine.js:0:0
    STACK:
    [0]anonymous@jsb-adapter/jsb-engine.js:4683
    [1]RenderFlow.render@jsb-adapter/jsb-engine.js:6464
    [2]render@src/cocos2d-jsb.df4d5.js:38504
    [3]mainLoop@src/cocos2d-jsb.df4d5.js:12817
    无限报错。 看了下是jsb-engine 中
    skeleton.setCompleteListener = function (listener) {
    this._completeListener = listener;
    if (this._nativeSkeleton) {
    if (this.isAnimationCached()) {
    this._nativeSkeleton.setCompleteListener(function (animationName) {
    var self = this._comp;
    self._endEntry.animation.name = animationName;
    self._completeListener && self._completeListener(self._endEntry);
    });
    } else {
    this._nativeSkeleton.setCompleteListener(listener);
    }
    }
    };
    函数中的 self._endEntry为空,每次打包后 都要重新判断添加一行
    if (!self._endEntry || !self._endEntry.animation) self._endEntry = { animation: { name: “” }, trackIndex: 0 };

还有一个是在隐藏节点下添加多个spine,然后将这个隐藏节点active设置为true后,spine 不显示。

  • 首个报错:

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

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率: 100%

你好,可否提供个复现demo,我这边使用2.4.2版本,没有出现你说的情况,代码如下。

测试demo spine_test.zip (504.9 KB)

在这个隐藏的节点下,添加多个不同的spine,当节点设置为true时,spine不会显示。浏览器会显示。

你好,问题已经复现,正在处理中。

1年了,没有结论吗,sentry收到超多这个报错

问题原因:

关于在web上没报错提示,原生上有报错提示的问题?

  • 对于错误的调用, 是会有报错提示的。如果要弄成静默方式的话,可以在所有报错的地方做保护。

修改的一些方案:

  • 方式1: 在destory之前设置active=true;
  • 方式2:注释 ske.setAnimationCacheMode(sp.Skeleton.AnimationCacheMode.SHARED_CACHE);

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。