在 cocos creator 里给Spine动画添加事件侦听
在Spine 动画 里面,美术为角色 做了一个打击的动作,并且添加事件,如下图:
"events": {
"feizhen_shoushang": {},
"quantou_shoushang": {},
"rengchawan_shoushang": {}
},
需求是在animation 播放的帧事件的时候,播放boss 收到攻击的动画,单纯的靠时间控制,不太准确,所以先在cocos 的论坛找了一圈没有找到,然后看spine 的官方文档,才发现了事件的用法:
实际上这是通过设置对 AnimationState
的调用完成的:
AnimationState state = ...
state.addListener(new AnimationStateAdapter() {
public void event (int trackIndex, Event event) {
// 此处检查并响应事件。
if (event.name == "footstep")
Audio.play("footstep" + event.intValue + ".wav");
}
});
还可以对单个 TrackEntry
设置调用:
TrackEntry entry = state.setAnimation(0, "run", true);
entry.setListener(new AnimationStateAdapter() {
public void event (int trackIndex, Event event) {
// 此处检查并响应事件。
if (event.name == "audio")
Audio.play(event.stringValue);
}
});
能和cocos creator api 挂钩的,也就是 TrackEntry,,
修改一下 用 cocos creator 的方法来写:
let entry = this.heroNpc.setAnimation(index, ani, false);
let start = Date.now();
/**
* 给Spine动画添加事件侦听
* @see http://zh.esotericsoftware.com/spine-events
* */
this.heroNpc.setTrackEventListener(entry, (trackIndex, event) => {
console.log("TrackEventListener :", event.data.name, Date.now() - start);
this.bossNpc.setAnimation(index, "boss_shoushang", false);
});
完美解决!
ps:不要在意那些动画的命名,因为是美术来的