关于CocosCreator里面导入spine的使用流程

Posted LANGZI7758521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于CocosCreator里面导入spine的使用流程相关的知识,希望对你有一定的参考价值。

在CocosCreator中运行效果如下图所示:

准备流程:

spine中信息列表:


导出文件:


拖入对应骨骼,然后添加脚本:


脚本如下:

    cc.Class({
        extends: cc.Component,
        editor: {
            requireComponent: sp.Skeleton
        },
     
        properties: {
            mixTime: 0.2
        },
     
        onLoad() {
            var spine = this.spine = this.getComponent('sp.Skeleton');
            this._setMix('walk', 'run');//动画混合播放,走和跑平滑过渡,不显的太僵硬
            this._setMix('run', 'jump');
            this._setMix('walk', 'jump');
     
            // .setStartListener()用来设置开始播放动画的事件监听。
            spine.setStartListener(trackEntry => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                cc.log("[track %s][animation %s] start.", trackEntry.trackIndex, animationName);
            });
            // .setInterruptListener()用来设置动画被打断的事件监听。
            spine.setInterruptListener(trackEntry => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                cc.log("[track %s][animation %s] interrupt.", trackEntry.trackIndex, animationName);
            });
            // .setEndListener()用来设置动画播放完后的事件监听。
            spine.setEndListener(trackEntry => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                cc.log("[track %s][animation %s] end.", trackEntry.trackIndex, animationName);
            });
            // .setDisposeListener()用来设置动画将被销毁的事件监听。
            spine.setDisposeListener(trackEntry => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                cc.log("[track %s][animation %s] will be disposed.", trackEntry.trackIndex, animationName);
            });
            // .setCompleteListener用来设置动画播放一次循环结束后的事件监听。
            spine.setCompleteListener((trackEntry, loopCount) => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                if (animationName === 'attack') { //如果当前为射击状态,立马清除
                    // .clearTrack(对应状态数字)清除出指定 track 的动画状态。
                    this.spine.clearTrack(1);
                }
                cc.log("[track %s][animation %s] complete: %s", trackEntry.trackIndex, animationName, loopCount);
            });
            // .setEventListener()用来设置动画播放过程中帧事件的监听。
            spine.setEventListener((trackEntry, event) => {
                var animationName = trackEntry.animation ? trackEntry.animation.name : "";
                cc.log("[track %s][animation %s] event: %s, %s, %s, %s", trackEntry.trackIndex, animationName, event.data.name, event.intValue, event.floatValue, event.stringValue);
            });
     
            this._hasStop = false;
     
            // var self = this;
            // cc.eventManager.addListener({
            //     event: cc.EventListener.TOUCH_ALL_AT_ONCE,
            //     onTouchesBegan () {
            //         self.toggleTimeScale();
            //     }
            // }, this.node);
        },
     
        // OPTIONS
     
        toggleDebugSlots() {
            // .debugSlots是否显示 slot 的 debug 信息。
            this.spine.debugSlots = !this.spine.debugSlots;
        },
     
        toggleDebugBones() {
            // .debugBones是否显示 bone 的 debug 信息。
            this.spine.debugBones = !this.spine.debugBones;
        },
     
        toggleTimeScale() {
            // .timeScale当前骨骼中所有动画的时间缩放率。
            if (this.spine.timeScale === 1.0) {
                this.spine.timeScale = 0.3;
            } else {
                this.spine.timeScale = 1.0;
            }
        },
     
        // ANIMATIONS
     
        stop() {
            // .clearTrack(对应状态数字)清除出指定 track 的动画状态。
            this.spine.clearTrack(0);
            this._hasStop = true;
        },
     
        walk() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'walk', true);
            this._hasStop = false;
        },
     
        run() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'run', true);
            this._hasStop = false;
        },
     
        jump() {
            // .animation当前播放的动画名称。
            var oldAnim = this.spine.animation;
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'jump', false);
            if (oldAnim && !this._hasStop) {
                this.spine.addAnimation(0, oldAnim === 'run' ? 'run' : 'walk', true, 0);
            }
        },
     
        crouch() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'crouch', true);
            this._hasStop = false;
        },
     
        head_turn() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'head-turn', true);
            this._hasStop = false;
        },
     
        fall() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'fall', true);
            this._hasStop = false;
        },
     
        idle() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(0, 'idle', true);
            this._hasStop = false;
        },
     
        // crouch() {
        //     // .animation当前播放的动画名称。
        //     var oldAnim = this.spine.animation;
        //     // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
        //     this.spine.setAnimation(0, 'crouch', false);
        //     if (oldAnim && !this._hasStop) {
        //         this.spine.addAnimation(0, oldAnim === 'run' ? 'run' : 'walk', true, 0);
        //     }
        // },
     
        attack() {
            // .setAnimation(trackIndex,name,loop)设置当前动画。队列中的任何的动画将被清除。返回一个 sp.spine.TrackEntry 对象。
            this.spine.setAnimation(1, 'attack', false);
        },
     
        _setMix(anim1, anim2) {
            // .setMix()为所有关键帧设定混合及混合时间(从当前值开始差值)。
            this.spine.setMix(anim1, anim2, this.mixTime);
            this.spine.setMix(anim2, anim1, this.mixTime);
        }
    });
————————————————
版权声明:本文为CSDN博主「MaximilianLiu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MaximilianLiu/article/details/79356242

以上是关于关于CocosCreator里面导入spine的使用流程的主要内容,如果未能解决你的问题,请参考以下文章

cocos creator基础-spine骨骼动画组件使用

CocosCreator-如何动态加载资源

cocoscreator卡在加载资源

CocosCreator入门 ------ 资源(骨骼动画)

Spine合批问题

spine纹理解包失败