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
})
}
}
}

COOL.