关于CocosCreator里面导入spine的使用流程_MaximilianLiu的博客-程序员宝宝

技术标签: CocosCreator知识库  cocoscreator  CocosCreator  spine  Skeleton  骨骼动画  cocos2d-js  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MaximilianLiu/article/details/79356242

智能推荐

idea中main方法无运行按钮和点击运行无反应_qq_44562987的博客-程序员宝宝_idea main方法没有运行按钮

今天将之前写好的项目导入idea,出现了没有运行按钮绿色的情况。经过多次查询,才知道是这样解决的。选中项目,右键找到Project Structure,选择第一个projects模块,最后的路径,是编译后的输出路径,我们需要选择路径后apply;其次,切换到moubles,查看source是否正确。经过这之后,按钮有了,可以运行,含有main方法的类异常的颜色为橙色,正常为蓝色。这个解决了,但是新的问题出现了。点击运行后,控制台看不到结果,相当于没有任何反应。这时,选中项目名,右键有个Invalidate

C++并发编程 | 利用CAS实现无锁数据结构(栈、队列和链表)_ZY-JIMMY的博客-程序员宝宝

CAS的基本原理、实现无锁栈、实现无锁队列、实现无锁链表

设计模式-创建型模式-单例模式-懒汉式_梦幻墟都的博客-程序员宝宝

设计模式-创建型模式-单例模式-懒汉式一、创建型模式二、单例模式三、懒汉式1.单线程懒汉式单例代码段1:单线程懒汉模式单例代码段2:单线程测试懒汉模式单例代码段3:多线程测试懒汉模式单例2.多线程懒汉式单例代码段4:懒汉模式单例加锁(多线程)3.完整版懒汉模式单例一、创建型模式创造型模式主要的关注点是怎么创建对象,主要特点是将对象的创建和使用分离开来。以此降低系统的耦合度,使用者可以不需要过分关注对象的创建细节,直接使用就可以。创造模式例子:去商城购买商品,并不需要知道商品是怎么来的怎么生产的,只

TCP连接三次握手_Java充电桩的博客-程序员宝宝

记漫画半小时第一章总结当数据通过TCP传输协议时,会先建立连接,而这个连接并不是一条线保持长连接,而是通过发送报文的形式.发送方 大雄接收方 静香第一次握手首先由发送方大雄 发送报文告知 我是大雄 我从哪里来 要到哪里去 找谁找静香一路经过路由器的转发后发送到了接收方静香静香收到报文后, 确定了大雄可以发送消息, 静香可以正常接收消息.第二次握手静香回信,告知大雄 我这边可以接信 你那边可以发信第三次握手大雄收到信后, 静香并不知道自己能不能发到大雄那所以大雄开始回信 我知道我自己可

git push 报错提示 ! [rejected] dev -> dev (non-fast-forward)_王坦.的博客-程序员宝宝

git push 出错! [rejected] dev -> dev (non-fast-forward)今天下午 push 代码时,报错! [rejected] dev -> dev (non-fast-forward), pull 了远程代码重新提交,还是同样的提示,最终尝试另外的方式才得解决:git fetch origin dev // 获取远程 dev 分...

【日常学习——论文写作】毕业论文的查重_向过去说再见的博客-程序员宝宝

个人总结:1.网页上的不要照搬照抄,就算是csdn这类社区,只要是百度能搜到的,知网都能查到(查重源包含网络资源)2.修改词语,改变段落顺序,加上语气词避免知网“13个字”原则,这种小伎俩也是会被检测出来的。3.表格数据也是会被查重的,图片不会一定要避免的:一定要避免的抄袭行为:1.论点(结论、观点)直接照搬他人受著作权保护的作品中的论点、观点、结论。2.论据论证(实验和观测结果分析)他人作品中的论据论证分析、科学实验(对象及方法)和观测结果及分析、科学调研、系统设计、问题的解决方法等等

随便推点

JDBC Driver For SQL2000/2005/2008_Hugoo_Hu的博客-程序员宝宝

转载自:http://www.cnblogs.com/downmoon/archive/2009/07/16/1524687.html机器上配置的JDK为1.6,SQL2005/2008,而JDBC Driver一直用Microsoft SQL Server 2005 JDBC Driver 1.2,支持sql2000/sql2005/sql2008,下载地址:

ajax wcf 谷歌浏览器,使用 HTTP POST 的 AJAX 服务_李牧錞的博客-程序员宝宝

使用 HTTP POST 的 AJAX 服务03/30/2017本文内容postajaxservice.sln 示例演示如何使用 Windows Communication Foundation (WCF) 创建使用 HTTP POST 的 ASP.NET 异步 JavaScript 和 XML (AJAX) 服务。 AJAX 服务是指可以从 Web 浏览器客户端使用基本 JavaScript 代...

[博弈论]初探(巴什、威佐夫、尼姆、斐波那契)_东皇太一在此的博客-程序员宝宝

文章目录一、巴什博弈(Bash Game)引例,最古老的一个游戏:分析归纳巴什博弈(一般化)问题描述代码示例二、威佐夫博弈(Wythoff Game)问题描述解题结论代码示例三、尼姆博弈 (Nimm Game)问题描述解题结论代码示例四、斐波那契博弈问题描述解题结论代码示例总结借鉴了大佬的资料:博弈论.一、巴什博弈(Bash Game)引例,最古老的一个游戏:A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30(第30个数)。分析第一次报数,A报出数的个数是 x ,那么 B报数 5-

Spring Cloud 2.x系列之服务发现&服务消费者Ribbon_BUG弄潮儿的博客-程序员宝宝

Spring常用注解视频路其实一直都在那里,只是我们看不到而已!在《服务注册&服务提供者》这一篇可能学习了这么开发一个服务提供者,在生成上服务提供者通常是部署在...

ubuntu 12.04 codeblocks undefined reference to ‘pthread_create'解决方法_Jason-xie的博客-程序员宝宝

settings---》compiler and bug settings --》link settings 在左边添加libpthread.a  ,右边添加 -lpthread即可。ubuntu libpthread.a 的路径为 /usr/lib/x86_64-linux-gnu/libpthread.a

Java aio(异步网络IO)初探_xuyan5971的博客-程序员宝宝

按照《Unix网络编程》的划分,IO模型可以分为:阻塞IO、非阻塞IO、IO复用、信号驱动IO和异步IO,按照POSIX标准来划分只分为两类:同步IO和异步IO。如何区分呢?首先一个IO操作其实分成了两个步骤:发起IO请求和实际的IO操作,同步IO和异步IO的区别就在于第二个步骤是否阻塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO服用、信号驱动IO都是同步IO

推荐文章

热门文章

相关标签