如图,setAnimation得到的TrackEntry在返回给js的时候调用了sptrackentry_to_jsval,后者的函数体中会根据地址作为key去map里面找过去的entry,找到就返回。
在setAnimation的函数实现中可以看出,每次返回的Entry都是new出来的,而且全局搜索会发现在spine中没有调用过jsb_remove_proxy去删除map中的entry,这就有一定几率获得之前释放过的相同地址,导致setAnimation之后调用的sptrackentry_to_jsval拿到过去setAnimation所加入map的entry,而这样,该entry的成员就不会得到更新,数据是错误的。
谢谢你的反馈!我们会跟进排查一下。
另外,这个问题在实际使用过程中具体的影响是什么呢?有没有可以稳定重现问题的方法或者 demo 呢?
现象是我这边四个角色创建以后播放站立动画,然后播放释放技能动画,技能动画中会发出一个事件。在这个事件的监听函数中调用getCurrent获取当前trackentry判断animation.name,本来应该四个都是技能动画的名称,但实际上会有两个是站立动画的。
就是因为站立动画setAnimation为技能动画的时候,有两个都取的是旧的entry,也就没有更新动画名称。
1.4 中会在 JS 对象释放的时候删除引用关系
