关于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 ...
随机推荐
- Report_Report Builder的一些基本概念(概念)
2014-05-31 Created By BaoXinjian
- Linux内存初始化(三) 内存布局
一.前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务.具体的c ...
- STM32 可编程电压监测器(PVD)实现数据掉电保存
STM32内部有一个完整的上电复位和掉电复位电路,当供电电压达到2v时系统即能正常工作. STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控.通过电源控制寄存器中的PLS[2:0]位可以 ...
- Xfire实现webservice时,对象传递规则及解析简析
Xfire实现webservice,传递对象解析的话,要分两种情况处理:1.基本类型对象:2.复杂对象 其实,在客户端直接传递数组,如String[] int[]等这些无法通过配置具体类型来通知xfi ...
- Hspice仿真打印某个子模块中所有信号信息
简单的说就是在你要打印的子模块中加一句:.probe v(*) i(*)就可以了,这个子模块的每一个实例都会被打印出来.
- 利用vagrant打包系统--制作自己的box
前置条件1.安装VirtualBox 2.安装Vagrant 3.在VirtualBox中安装操作系统,例如 CentOS 1)把在virtualBox中安装的系统打包成box 1.我们需要知道虚拟机 ...
- mongo操作及相关资料
mongo操作 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): ...
- ILRewrite && how to write a profiler
Rewrite MSIL Code on the Fly with the .NET Framework Profiling API http://clrprofiler.codeplex.com/ ...
- error LNK2019: 无法解析的外部符号(编程解决方法)
正在编译...1>Ipv4IPv6traceroutesrc.cpp1>d:\研究生\c++\study\test\test\ipv4ipv6traceroutesrc.cpp(461) ...
- CentOS 7.0 以后的几件事情
1.当最大化时隐藏标题栏 或者使用tweak tool 在字体中将标题栏字体设置为0...建议这个方法. 2.添加epel源 yum -y --nogpgcheck install http://do ...