关于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 ...
随机推荐
- BIP_BI Pubisher的SQL/XSL/FO扩展函数应用(概念)
2014-12-01 Created By BaoXinjian
- 做一个新产品需求,体验的分析文档?(例:喜马拉雅FM)
2.1 战略层 2.11 产品定位: 一款产品覆盖面广,收听节目种类齐全,资源丰富的电台APP. 以PGC为主流,通过合作方式吸纳专业的电台人,节目人,行业名人分享内容. 融合UGC,满足人们在空闲时 ...
- dataframe 合并(append, merge, concat)
https://www.cnblogs.com/guxh/p/9451532.html https://blog.csdn.net/zutsoft/article/details/51498026 写 ...
- starUML破解方法(Windows10 & MAC)
安装好,打开安装目录,依次找到[www\license\node],找到名为[LicenseManagerDomain]的js文件,打开它,在第25行位置插入以下几句代码: return { name ...
- django 创建数据库表 命令
一旦你觉得你的模型可能有问题,运行 python manage.py validate . 它可以帮助你捕获一些常见的模型定义错误. 模型确认没问题了,运行下面的命令来生成 CREATE TABLE ...
- laravel的模型和数据库基础操作
laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\Support\Facades\ ...
- Python 计算两个IP段之间的有效IP地址
Can anyone think of an algorithm to put all of the addresses between two others and put them in a li ...
- win常用
//base.Invoke((MethodInvoker)delegate() //{ // this.Close(); //});
- 【Android】4.2 资源限定符和可视化选项
分类:C#.Android.VS2015:创建日期:2016-02-06 在设计界面中,所有资源都可以被限定为使用哪个国家或地区的语言.例如,将字符串资源限定为默认使用中文等. 将字符串资源限定为默认 ...
- MD5加密 时间差 流水号等方法
/// <summary> /// 使用TimeSpan计算两个时间差 /// </summary> /// <param name="DateTime1&qu ...