在 cocos creator 里给Spine动画添加事件侦听

在Spine 动画 里面,美术为角色 做了一个打击的动作,并且添加事件,如下图:

在 cocos creator 里给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:不要在意那些动画的命名,因为是美术来的