在3.7.3使用同样的代码没有任何问题,之前在3.8.1有问题,听说3.8.2修复了setTrackXXXListener的系列问题,实际使用依然有问题。
核心代码:
private SetWalk() {
console.log('Set Walk ');
this.m_man_spine.timeScale = 1;
let track = this.m_man_spine.setAnimation(0, 'Walk', false);
this.BindTrackListener(track);
this.m_main_bg_compment.PlayerWalk();
}
// 绑定事件监听
private BindTrackListener(track: sp.spine.TrackEntry) {
if (track != null) {
console.log('Set Track ' + track.animation.name + ' CompleteListener and EventListener');
this.m_man_spine.setTrackCompleteListener(track, this.TrackCompleteListener);
this.m_man_spine.setTrackEventListener(track, this.TrackEventListener);
}
}
// 动画播放完毕的回调
public TrackCompleteListener(trackEntry: sp.spine.TrackEntry) {
console.log('Track ' + trackEntry.animation.name + ' Complete');
switch (trackEntry.animation.name) {
case 'Walk':
case 'Tired':
PlayerInstance.GetInstance().SetStatus(MAN_STATUS.Walk);
break;
case 'Click':
PlayerInstance.GetInstance().EndClick();
break;
case 'ClickOver':
PlayerInstance.GetInstance().EndClickOver();
break;
case 'Wink':
PlayerInstance.GetInstance().EndWink();
break;
default:
break;
}
}
// 动画事件的回调
public TrackEventListener(trackIndex, event: sp.spine.Event) {
switch (event.data.name) {
case 'Tired':
AudioInstance.GetInstance().PlaySoundClip('tired');
break;
case 'Click':
AudioInstance.GetInstance().PlaySoundClip('gu');
EventManagerInstance.GetInstance().Notify(GameMsgType.DoAddTargetNum, null);
break;
default:
break;
}
}
运行打印

Walk动画只有一次回调之后再设置CompleteListener 动画播放完就收不到 Track Walk Complete回调了
最终只有在3.8.2中引入之前帖子中的一个修复spine补丁才能正常运行。
https://forum.cocos.org/t/topic/154238/6