关于Cocos Creator用js脚本代码播放骨骼动画的步骤和注意事项
步骤:
1.用cc.find()方法找到相应的骨骼动画节点,并把这个对象赋值给一个var出来的新对象。
具体代码:var spineboy_anim = cc.find("UI_Root/anchor_lb/spineboy");
2.用getComponent()方法找到相应骨骼动画节点的骨骼动画组件,并把这个对象赋值给一个var出来的新对象。
具体代码:var ske_anim_comp = spineboy_anim.getComponent(sp.Skeleton);
3.把第二点的新对象通过赋值给一个新的全局对象this.ske_comp,这个对象可以在其他的函数里面使用。
不像C和C++语言,要先声明和定义才能使用函数,JavaScript里面的函数定义的位置都是随便放的,函数里面要用其他函数的时候,用一个全局的this对象指向要用的目标函数就行了。
当然也可以把变量赋值给全局this对象的一个属性,这个属性可以自己定义,这个属性在其他函数里面也可以用。但是JavaScript里面的对象和变量都用var来定义,所以有时候如果不清楚得到的结果的类型会分不清赋值的是对象还是变量。
具体代码: this.ske_comp = ske_anim_comp;
4.创建一个 play_spineboy_walk的函数
5.在play_spineboy_walk函数里面实现动画的清零和播放,这个方法是Cocos Creator提供的,可以在官方api找到。
this.ske_comp.clearTrack(0); //队列中的指定的动画将被清除,这里清除0号位置的动画。
this.ske_comp.setAnimation(0,"walk",true); //设置播放第几个骨骼动画,0是把它放在要播放动画的队列中的第0个的位置,“walk”是骨骼动画动作的名字,true是是否循环播放。
6.在onload方法里面写一下这个代码,来调度一个只运行一次的回调函数。
this.scheduleOnce(this.play_spineboy_walk.bind(this));
注意:
1.如果在动画子节点里面设置播放的动画动作为None,而在UI_Root节点上的脚本代码却在onLoad方法里面用this.paly_spineboy_walk()方法来设置播放的动画是播不了的,因为creator会先处理UI_Root节点的脚本,再处理子节点的脚本,相当于用代码设置好的要播的动画,被动画子节点的设置给清除了。而我们用回调函数且只调用一次,使它调用完UI_Root节点上的脚本后就不在理会子节点的脚本,这样就可以播放我们想要播放的指定动作了。
2.在使用this.scheduleOnce(this.play_spineboy_walk.bind(this))的时候一定要注意加一个bind(this),这是JavaScript最难的地方,这里如果不加bind(this),play_spineboy_walk函数里面的this就不是全局的this,我是这样理解的,因为在JavaScript里面,函数名:function()这样写的函数也算是一个对象,这时候如果使用两次this.第一次this.play_spineboy_walk指定了play_spineboy_walk这个函数对象,而下一次的this,也就是play_spineboy_walk内部的this指的就是它自己这个函数对象,this.ske_comp就不存在,所以要用bind(this)来让play_spineboy_walk方法里面的this和调用play_spineboy_walk的this的性质一样,都是指向全局对象的this。
完整代码:
cc.Class({
extends: cc.Component,
properties: {
// foo: {
// default: null,
// url: cc.Texture2D, // optional, default is typeof default
// serializable: true, // optional, default is true
// visible: true, // optional, default is true
// displayName: 'Foo', // optional
// readonly: false, // optional, default is false
// },
// ...
},
// use this for initialization
onLoad: function () {
var spineboy_anim = cc.find("UI_Root/anchor_lb/spineboy");
var ske_anim_comp = spineboy_anim.getComponent(sp.Skeleton);
this.ske_comp = ske_anim_comp;
this.scheduleOnce(this.play_spineboy_walk.bind(this));
//this.paly_spineboy_walk();
//console.log(ske_anim_comp);
},
play_spineboy_walk: function(){
this.ske_comp.clearTrack(0); //队列中的指定的动画将被清除,这里清除0号位置的动画。
this.ske_comp.setAnimation(0,"walk",true); //设置播放第几个骨骼动画,0是把它放在要播放动画的队列中的第0个的位置,“walk”是骨骼动画动作的名字,true是是否循环播放。
},
// called every frame, uncomment this function to activate update callback
// update: function (dt) {
// },
on_home_start: function(){ //切换到开始的场景
cc.director.loadScene("startscene");
},
});
关于Cocos Creator用js脚本代码播放骨骼动画的步骤和注意事项的更多相关文章
- 引用第三方高德地图接口---使用js脚本进行开发地图定位的步骤
①在高德地图开发平台注册一个账号,获取key ②添加新的key ③引入map插件 ④复制过来map的脚本代码和编写搜索框 <script type="text/javascript&q ...
- 基于Babylon.js编写简单的骨骼动画生成器
使用骨骼动画技术可以将网格的顶点分配给若干骨头,通过给骨头设定关键帧和父子关系,可以赋予网格高度动态并具有传递性的变形 效果.这里结合之前的相关研究在网页端使用JavaScript实现了一个简单的骨骼 ...
- .net 用户控件ascx.cs注册js脚本代码无效果
在.net web项目中碰到一个比较奇怪的问题,网上没找到解决方案,先自己mark一下 问题描述: 添加一个用户控件ascx,在后端.cs添加js注册脚本,执行后没有弹出框 注册脚本为: this.P ...
- ASP.NET后台输出js脚本代码
利用asp.net输出js我们大多数都会直接使用Respone.Write()然后根js格式的代码,再在页面调用时我们直接这样是完全可以实现的,下面我来给大家介绍另一种方法 我是我最初的想法以下是代码 ...
- php使用正则过滤js脚本代码实例
匹配的规则不能用 "/<script.*<\/script>/i",因为它不能匹配到换行符,那么多行js就匹配不掉了. 要用 "/<script[ ...
- js脚本代码调试小技巧
以前写js代码调试代码查看数据是否正确的时候不知道F12(开发者工具),都是alert(xxx)或者console.log(xxx), 现在知道还可以用document.write或者try...ca ...
- 总结ASP.NET C#中经常用到的13个JS脚本代码
1.按钮前后台事件 <asp:Button ID="Button1" runat="server" OnClick="Button1_Click ...
- 【XP-IE8】XP系统的IE8无法正常访问图片,按钮无反应,不执行JS脚本代码
环境: Windows XP ,自带的是IE6,另外安装的 IE8 . 状况: 使用IE8浏览内网网站,点击登录按钮,没有反应.滚动图片新闻不显示.但使用Chrome浏览器,一切正常,说明是IE8某处 ...
- rem布局js脚本代码
目前代码在750屏幕分辨率下是十倍 基本上使用iphone是375宽度 所以就是20倍 图片背景可以使用二倍图 (function (doc, win) { var docEl = doc.docum ...
随机推荐
- Calendar 中getActualMaximumd 功能
String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")) .format(new Date()); Calend ...
- powerdesigner学习笔记【转载】
转自:http://blog.itpub.net/11968859/viewspace-620440/ 谢谢! 1.做CDM模型的时候,因为开始定义ITEM的时候,没有注意把NAME和CODE全定义成 ...
- Kali 2.0最新国内源:阿里云,中科大
版权声明:本文为博主原创文章,转载请注明来源. https://blog.csdn.net/liushulin183/article/details/51519628 刚刚要给kali装个中文输入法 ...
- Latex 转 word 技法大全
Latex 转 word 技法大全 在稿件接收后,经常会遇到出版社要求变更稿件格式,其中最多的是latex变为word格式.如果手工操作,是非常麻烦的,还容易出错.如果钱多得花不了,可以让出版社找人去 ...
- 使用Spring boot开发RestFul 风格项目PUT/DELETE方法不起作用
在使用Spring boot 开发restful 风格的项目,put.delete方法不起作用,解决办法. 实体类Student @Data public class Student { privat ...
- 使struct对象拥有可变大小的数组——(C++深度探索)
首先摘录<Inside The C++ Object Model>中的一段话: 把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组: ...
- js获取当前页面url网址等信息
使用js获取当前页面的url网址信息. 1.设置或获取整个 URL 为字符串: window.location.href 2.设置或获取与 URL 关联的端口号码: window.location.p ...
- paip.提升性能--多核编程中的java .net php c++最佳实践 v2.0 cah
paip.提升性能--多核编程中的java .net php c++最佳实践 v2.0 cah 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax ...
- MySQL数据库如何去掉数据库中重复记录
对于常规的MySQL数据表中可能存在重复的数据,有些情况是允许重复数据的存在,有些情况是不允许的,这个时候我们就需要查找并删除这些重复数据,以下是具体的处理方法! 方法一:防止表中出现重复数据 当表中 ...
- Django 自带密码加密,自定密码加密方式 及自定义验证方式
在django1.6中,默认的加密方式是pbkdf_sha256,具体算法不表,一直以来用django的自带用户验证都十分顺手,今天有需求,需要修改默认加密方式为md5,具体方法为: 在setting ...