3.8.6监听不到spine的帧事件

assets.zip (282.7 KB)

我看 json 里面是有 events 的,在spine里面播放也能看到弹出事件名,导出后就是在cocos中获取不到,是哪里操作不对吗?


getComponent(sp.Skeleton).setEventListener(this.onSpineEvent.bind(this));
private onSpineEvent(entry: any, event: any) {
let sEvent = entry.animation ? event.data.name : “”;
console.log("帧事件: ", sEvent);
}

    protected onLoad(): void {
    const player = this.getComponent(sp.Skeleton);
    player.setEventListener((e) => {
        console.log('event: ', e);       // --- 没有输出
    })

    player.setCompleteListener(() => {
        console.log('completed')
    })

    player.setStartListener(() => {
        console.log('start');
    })
    this.player = player;
}

protected start(): void {
    this.player.setAnimation(0, 'animation', false);
}

看下Cache Mode

改成 REALTIME

改成 REALTIME 确实可以了,太感谢了。
习惯使用 SHARED_CACHE 了。

其他模式没有帧事件输出,得自定义实现

我也遇到了,我的解决方案是,在程序内把 事件名称、事件时间 读取出来,自己处理

        //事件
        this.eventList = []
        for (let key in track.animation.timelines) {
            let info: any = track.animation.timelines[key]
            if (info && info.events && info.events.length > 0) {
                for (let key in info.events) {
                    let even = info.events[key]
                    let time = even.time
                    let name = even.data.name
                    !time && (time = 0)
                    this.eventList.push({
                        name: name,
                        time: time,
                        done: false
                    })
                }
            }
        }

image

COOL.