v2.4.4 ,spine3.8.99
setAnimation
在 REALTIME模式,正常返回。
在SHARE_CACHE模式,返回为null。
如果返回为null,就无法去 setTrackEventListener 设置动画播放结束的回调了
v2.4.4 ,spine3.8.99
setAnimation
在 REALTIME模式,正常返回。
在SHARE_CACHE模式,返回为null。
如果返回为null,就无法去 setTrackEventListener 设置动画播放结束的回调了
2.4.4 spine一堆bug,反馈了估计也没人回。
相比1.9.3版本,2.4.4版本的spine确实是渣
问题1:
skeleton.clearTracks()
2.4.4会执行上一次setEndListener 的回调。
spine文件 为二进制时,100%复现;
spine文件 为json格式,第一次正常,第二种执行clearTracks语句会先执行EndListener回调,后面setAnimation之后,再setEndListener的回调不会执行,100%复现
private wordAni(skeleton: sp.Skeleton | null, animName = ‘animation’, completeCB?: () => void) {
if (skeleton) {
skeleton.clearTracks();
skeleton.node.position = cc.v2();
skeleton.node.active = true;
skeleton.setAnimation(0, animName, false);
skeleton.setEndListener(() => {
if (skeleton) {
skeleton.node.active = false;
}
if (completeCB) {
completeCB();
}
});
}
}
复现demo
在第二次执行 wordAni的时候,执行到clearTracks,会直接执行上一次setEndListener的回调
问题2:
setToSetupPose 之后,setAnimation,会立即执行 setEndListener 的回调。
private wordAni(skeleton: sp.Skeleton | null, animName = ‘animation’, completeCB?: () => void) {
if (skeleton) {
skeleton.setToSetupPose();
skeleton.setEndListener(() => { });
skeleton.node.position = cc.v2();
skeleton.node.active = true;
skeleton.setAnimation(0, animName, false);
skeleton.setEndListener(() => {
if (skeleton) {
skeleton.node.active = false;
}
if (completeCB) {
completeCB();
}
});
}
}
问题3:
setEndListener 在第一次setsetAnimation 执行完成之后,不会执行。
第二次播放才会执行end 回调。
使用的是 官方的测试用例 spineBoy.fire场景。
walk() {
this.spine.setEndListener(trackEntry => {
console.log('walk')
})
this.spine.setAnimation(0, 'walk', false);
this._hasStop = false;
},
这是改写的 walk接口,100%复现
我最近也遇到个,很难受,原本监听的是setEndListener,本来会生效,后来不知道改到啥了,死活不生效了,只能改成setCompleteListener监听了
2.4.4 升的我压抑不住的气啊,一堆bug,提了基本没人理
专注3.0走向世界呢,别急。
这个是对的,你setAnimation相当于结束上一个动画,上一个动画的setEndListener当然会执行。
setEndListener你可以理解为切换动画时会触发的回调。
完成就用setCompleteListener
spine的可以主要@mmyduckx
我感觉问题都出在对setEndListener有误解
setCompleteListener 是可以的,我也是改成了setCompleteListener。
setEndListener这玩意之前版本是可以的,改成2.4.4后,spine升级到3.8.8后出了问题。
spine的二进制格式和 json格式的表现也会不一样,你可以试下上面我说的。
我之前也这么恶心过,测试后得出我上面说的结论。setEndListener变成了动画发生改变时触发的回调了
这个不应该吧,你确定美术导出没问题吗
美术没问题,问题是美术已经将资源升级为3.88之后,不能回退3.7了,那才是真的坑
这个意思是loop=false的时候播放完成也不会调用endlistener了?
我以前也遇到过,美术自己想办法回退了,应该是有老版文件
对啊,你动画没变只是播放完了