3.8.2的setTrackCompleteListener依然有问题

在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;

        }

    }

运行打印
image

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

在不引入修复spine补丁的情况以下方法也能实现正常运行

    private SetWalk() {

        console.log('Set Walk ');

        this.m_man_spine.clearTrack(0);

        this.m_man_spine.timeScale = 1;

        this.m_man_spine.setAnimation(0, 'Walk', false);

        setTimeout(() => {

            let track = this.m_man_spine.getCurrent(0);

            this.BindTrackListener(track);

        }, 1);

        this.m_main_bg_compment.PlayerWalk();

    }

官方尽快修复吧

1赞

感激,加上这个延时之后就能稳定触发了

遇到了同样的问题,3.8.3也没修改这问题啊,官方修复下吧

3.8.6都没修复。。。。。。。