spine 动画 使用 animationStart 播放 ,但是 播放之前的 帧事件被触发?怎么解决!!!

start () {

    this.addActionListener();

    let crad_go_endTime = this.cardsGoAniSke.findAnimation("end").duration;

    let cardsGoTrackEntry = this.cardsGoAniSke.setAnimation(0, 'end', false);

    cardsGoTrackEntry.animationStart = 7;

    //rdsGoTrackEntry.trackTime = crad_go_endTime;

    //cardsGoTrackEntry.anianimationLast = crad_go_endTime;

}

addActionListener() {

    this.cardsGoAniSke.setEventListener((entry, event) => {

        if (event.data.name === 'slow') {

            console.log("slow"+ event.stringValue);

        }

    });

}

使用的编辑器版本?

2.4.6

AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {

        var animation = this.data.skeletonData.findAnimation(animationName);

        if (animation == null)

            throw new Error("Animation not found: " + animationName);

        return this.setAnimationWith(trackIndex, animation, loop);

    };

AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {

        if (animation == null)

            throw new Error("animation cannot be null.");

        var interrupt = true;

        var current = this.expandToIndex(trackIndex);

        if (current != null) {

            if (current.nextTrackLast == -1) {

                this.tracks[trackIndex] = current.mixingFrom;

                this.queue.interrupt(current);

                this.queue.end(current);

                this.disposeNext(current);

                current = current.mixingFrom;

                interrupt = false;

            }

            else

                this.disposeNext(current);

        }

        var entry = this.trackEntry(trackIndex, animation, loop, current);

        this.setCurrent(trackIndex, entry, interrupt);

        this.queue.drain();

        return entry;

    };

EventQueue.prototype.drain = function () {

        if (this.drainDisabled)

            return;

        this.drainDisabled = true;

        var objects = this.objects;

        var listeners = this.animState.listeners;

        for (var i = 0; i < objects.length; i += 2) {

            var type = objects[i];

            var entry = objects[i + 1];

            switch (type) {

                case EventType.start:

                    if (entry.listener != null && entry.listener.start)

                        entry.listener.start(entry);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].start)

                            listeners[ii].start(entry);

                    break;

                case EventType.interrupt:

                    if (entry.listener != null && entry.listener.interrupt)

                        entry.listener.interrupt(entry);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].interrupt)

                            listeners[ii].interrupt(entry);

                    break;

                case EventType.end:

                    if (entry.listener != null && entry.listener.end)

                        entry.listener.end(entry);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].end)

                            listeners[ii].end(entry);

                case EventType.dispose:

                    if (entry.listener != null && entry.listener.dispose)

                        entry.listener.dispose(entry);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].dispose)

                            listeners[ii].dispose(entry);

                    this.animState.trackEntryPool.free(entry);

                    break;

                case EventType.complete:

                    if (entry.listener != null && entry.listener.complete)

                        entry.listener.complete(entry);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].complete)

                            listeners[ii].complete(entry);

                    break;

                case EventType.event:

                    var event_3 = objects[i++ + 2];

                    if (entry.listener != null && entry.listener.event)

                        entry.listener.event(entry, event_3);

                    for (var ii = 0; ii < listeners.length; ii++)

                        if (listeners[ii].event)

                            listeners[ii].event(entry, event_3);

                    break;

            }

        }

        this.clear();

        this.drainDisabled = false;

    };

我感觉是setanimation 然后drain 把所有的帧事件触发了?

:upside_down_face:还好我们没这么处理过,记录个坑,等待后续
跳帧的动画我们没加过事件帧,有事件帧的动画没跳过帧播放,我运气真特么好 :rofl:

这个方便给个demo吗?