CocosCreator开发笔记(15)-如何处理Spine动画的回调

CocosCreator提供了很方便的Spine动画接口,我们常常会在播放Spine动画完成后做一些处理,这就需要知道Spine动画播放完成的准确时机,CocosCreator官方Demo中示范的setStartListener、setEndListener等回调函数,虽然有效,但它只能访问到本Animation对象,而不能访问到脚本的this对象。
查看引擎源码发现,其实Spine接口还提供了一个设置回调的接口setAnimationListener,在这里可以处理所有动画事件,也能访问到this对象。
假设包含了Spine动画组件的节点名为spineNode,则可以先在start设置好回调,如下:

start () {
    let spine = this.spineNode.getComponent('sp.Skeleton');
    spine.setAnimationListener(this, this.spineEventCallback); // 设置回调
    spine.setAnimation(0, 'run', false); // 播放名为run的动画
},

Spine动画事件的回调函数实现如下:

spineEventCallback: function(skeletonNode, trackEntry, eventType, event, loopCount) {
    // 如果动画播放完成且名字等于run,做相应处理
    if (eventType === sp.AnimationEventType.COMPLETE && trackEntry.animation && trackEntry.animation.name === 'run') {
        this.node.destroy();
    }
},

引擎中对Spine事件类型的定义如下:

sp.AnimationEventType = cc.Enum({
      START: 0,
      INTERRUPT: 1,
      END: 2,
      DISPOSE: 3,
      COMPLETE: 4,
      EVENT: 5
    });

注:如果动画是循环的,则每完成一次循环都会触发COMPLETE。

猜你喜欢

转载自blog.csdn.net/foupwang/article/details/81096863