转载地址:https://www.cnblogs.com/rickyctbu/p/10086597.html

一、普通动画的设置

1、添加动画组件

  a、添加空节点=>添加动画组件

  b、新建Clip文件=>打开编辑模式添加动画编辑(并且把添加的clip文件拖动到右边面板的Default Clip 与相对应的Clips文件里)

Default Clip => 在勾选Play On Load时或者调用play()默认播放的动画

  Clips => 通过脚本访问可以播放的AnimationClip列表

  Play On Loat => 是否在加载的时候播放

2、设置动画

 WrapMode => 动画模式(default:默认,normal:正常,loop:循环...)

  Sample => 定义当前动画数据每秒的帧率,默认为 60,这个参数会影响时间轴上每两个整数秒刻度之间的帧数量(也就是两秒之内有多少格)

  Speed => 当前动画的播放速度,默认为 1

  设置动画的步骤:选定节点后,点击+号选择需要设置的属性,如position,opacity等,点击添加关键帧,拉动线色线条到指定的时间点,再添加关键帧,设置所对应的值保存即可(如果是位置值,可直接拖动即可)如果是设置图片的动画选择cc.Sprite.spriteFrame,把指定的图片拖动到关键帧即可,概括如下:

  (1)添加动画属性
  (2)添加关键帧/删除关键帧,选到关键帧,在属性编辑器上编辑和修改;
  (3)编辑补间动画曲线路径;

3、代码控制动画

a: Animation组件主要的方法:

play([name], [start_time]), 播放指定的动画,如果没有制定就播放默认的动画;

playAdditive: 与play一样,但是不会停止当前播放的动画;

stop([name]): 停止指定的动画,如果没有指定名字就停止当前播放的动画;

pause/resume: 暂停唤醒动画;

getClips: 返回组件里面带的AnimationClip数组

b: Animation重要的属性:

defaultClip: 默认的动画剪辑;

currentClip: 当前播放的动画剪辑;

c: Animation播放事件:  动画组件对象来监听on,不是节点,取消注册的事件用off

play : 开始播放时  stop : 停止播放时 pause : 暂停播放时 resume : 恢复播放时

lastframe : 假如动画循环次数大于 1,当动画播放到最后一帧时 finished : 动画播放完成时

cc.Class({extends: cc.Component,properties: {animate: {type: cc.Animation,default: null}},onLoad() {//方法一// this.anim_con = this.animate;//方法二this.anim_con = this.node.getChildByName('anim').getComponent(cc.Animation);//获取铵钮组件let btn = this.node.getChildByName('btn').getComponent(cc.Button);//绑定事件let click_event = new cc.Component.EventHandler();click_event.target = this.node;click_event.component = 'test_scene';click_event.handler = 'col_anim';btn.clickEvents.push(click_event);//绑定监听事件//监听开始播放this.anim_con.on('play', function () {console.log('已经开始播放了哈!!!');}.bind(this), this);//监听暂停this.anim_con.on('pause', function () {console.log('已经暂停了哈!!!');}.bind(this), this);//监听继续this.anim_con.on('resume', function () {console.log('现在继续哈!!!');}.bind(this), this);//完成播放时调用this.anim_con.on('finished', function () {console.log('完成了!');}.bind(this), this);},start() {this.anim_con.play();this.isPlayAnim = true;},col_anim() {if (this.isPlayAnim) {//暂停this.anim_con.pause();} else {//继续this.anim_con.resume();}this.isPlayAnim = !this.isPlayAnim;}
});

4、在动画上绑定事件

步骤:点击红色圆圈处绑定事件,双击蓝色处弹出对话框绑定事件

遍历当前动画组件所挂节点上面所有的脚本或组件,根据这个名字来触发函数;注意:要把脚本绑定在动画组件所挂的节点上
要慎用,代码和动画之间不易太多的调用;

二、Skeleton骨骼动画的设置

  1、骨骼动画的基本配置及生成

    a: 骨骼动画: 把动画打散, 通过工具,调骨骼的运动等来形成动画
    b: spine是一个非常流行的2D骨骼动画制作工具
    c: spine 动画美术人员导出3个文件:
      (1) .png文件:动画的”骨骼”的图片集;
      (2).atlas文件: 每个骨骼在图片集里面位置,大小;
      (3).json文件: 骨骼动画的anim控制文件,以及骨骼位置等信息;
    d: 骨骼动画导入: 直接把三个文件拷贝到项目的资源目录下即可;
    e: 使用骨骼动画: 
      (1) 直接拖动到场景;
      (2) 创建一个节点来添加sp.Skeleton组件,注意:在脚本里面定义资源要用sp.Skeleton来指定

   2、骨骼动画的js属性及接口

 sp.Skeleton: 控制面板属性:

    Skeleton Data =>骨骼的控制文件.json文件;
    Default Skin => 默认皮肤;
    Animation => 正在播放的动画;
    Loop => 是否循环播放;
    Premuliplied Alpha => 是否使用贴图预乘;
    TimeScale => 播放动画的时间比例系数;
    Debug Slots => 是否显示 Slots的调试信息;
    Debug Bone => 是否显示Bone的调试信息;
  3、sp.Skeleton重要的方法: Skeleton是以管道的模式来播放动画,管道用整数编号,管道可以独立播放动画,Track;
    (1)clearTrack(trackIndex): 清理对应Track的动画
    (2)clearTracks(); 清楚所有Track动画
    (3)setAnimation(trackIndex, “anim_name”, is_loop)清楚管道所有动画后,再从新播放
    (4)addAnimation(trackIndex, “anim_name”, is_loop);往管道里面添加一个动画;

  4、sp.Skeleton的监听方法

    1: setStartListener: 设置动画开始播放的事件;
    2: setEndListener : 设置动画播放完成后的事件;
    3: setCompleteListener: 设置动画一次播放完成后的事件;

cc.Class({extends: cc.Component,properties: {spine: {//配置动画资源 注意:这里是sp.SkeletonDatatype: sp.SkeletonData,default: null}},onLoad() {//调用函数创建节点以及动画组件this.create_elem();let btn1 = this.node.getChildByName('btn1').getComponent(cc.Button);let btn2 = this.node.getChildByName('btn2').getComponent(cc.Button);let btn3 = this.node.getChildByName('btn3').getComponent(cc.Button);this.bind_click(btn1, 'btn1_click');this.bind_click(btn2, 'btn2_click');this.bind_click(btn3, 'btn3_click');//动画监听this.sket.setStartListener(function () {console.log('动画开始了');});this.sket.setEndListener(function () {console.log('动画全部完成了');});this.sket.setCompleteListener(function () {console.log('一部份动画完成了');})},start() {},//创建一下绑定点击事件的方法bind_click(con, fn, param) {let click_events = new cc.Component.EventHandler();click_events.target = this.node;click_events.component = 'test_scene';click_events.handler = fn;param ? click_event.customEventData = param : void 0;con.clickEvents.push(click_events);},btn1_click() {this.item.active = true;this.sket.clearTrack(0);this.sket.setAnimation(0, 'in', false);this.sket.addAnimation(0, 'clk_1', false);},btn2_click() {this.item.active = true;this.sket.clearTrack(0);this.sket.setAnimation(0, 'clk_1', false);this.sket.addAnimation(0, 'clk_2', false);},btn3_click() {this.item.active = true;this.sket.clearTrack(0);this.sket.setAnimation(0, 'clk_3', false);this.sket.addAnimation(0, 'out', false);},//创建节点以及动画组件create_elem() {this.node.addChild(new cc.Node(), 0, 'ske');this.item = this.node.getChildByName('ske');this.item.x = -100;this.item.y = -300;//设置隐藏this.item.active = false;let sket = this.item.addComponent(sp.Skeleton);sket.skeletonData = this.spine;sket.premultipliedAlpha = false;this.sket = sket;}
});

三、DragonBones 骨骼动画的设置和使用

1、添加DragonBones骨骼动画

  添加空节点 => 在空节点里面添加渲染组件 => DragonBones

 Dragon Asset 表示骨骼信息数据,是一个JSON文件

  Dragon AtlasAsset 表示texture的信息数据

  Armature 表示当前的Armature名称

  Animation 表示当前播放的动画

  Time Scale 表示所有动画的时间缩放率

  Play Times 表示动画的播放次数,默认是-1

  Debug Bones 表示是否显示骨骼的信息

2、通过代码获取骨骼组件

cc.Class({extends: cc.Component,properties: {person: {type: dragonBones.ArmatureDisplay,default: null}},start() {//获取骨骼动画的方式一console.log(this.person);//获取骨骼动画的方式二let node = this.node.getChildByName('person');let bones = node.getComponent(dragonBones.ArmatureDisplay);console.log(bones);}
});

重要API展示

以下dragonBone表示实例化后的dragonBone对象

let Armature=dragonBone.armature();

播放动画 => Armature.animation.play(name, playtimes) name 表示动画的名称,playtimes表示动画次数如果为0就表示循环播放动画

获取所有动画名称 =>  Armature.animation.animationList  ||  Armature.animation.animationNames

停止指定动画的播放 =>  Armature.animation.stop('stand');

cc.Class({extends: cc.Component,properties: {person: {type: dragonBones.ArmatureDisplay,default: null}},start() {let Armature = this.person.armature();let body = Armature.getBone('body');//指定对象的翻转// body.offset.rotation = 0;//获取所有的骨骼// console.log(Armature.getBones());//获取所有的插槽// console.log(Armature.getSlots());//图片X轴方向翻转// Armature.flipX = true;let leg = Armature.getBone('legLeftUp');//隐藏指定的骨骼// leg.slot.displayIndex = -1;//移除骨骼,注意,这里的参数必需是对应的骨骼对象,这里会同时隐藏其子组件的骨骼对象// Armature.removeBone(leg);}
});

cocos creator 动画编辑器以及骨骼动画的使用相关推荐

  1. 动画编辑器和骨骼动画使用

    动画编辑器 1.使用编辑器来创建编辑动画 (1)创建一个节点 (2)往节点里添加动画组件cc.Animation (3)编辑 动画剪辑器制作 AnimClip 动画剪辑就是一份动画的声明数据,我们将它 ...

  2. Cocos Creator 龙骨DragonBones(导出骨骼/使用骨骼/局部换装/全局换装)

    https://www.cnblogs.com/gamedaybyday/p/13021916.html Cocos Creator 龙骨DragonBones(导出骨骼/使用骨骼/局部换装/全局换装 ...

  3. 【Away3D代码解读】(五):动画模块及骨骼动画

    动画模块核心存放在away3d.animators包里: Away3D支持下面几种动画格式: VertexAnimator:顶点动画 SkeletonAnimator:骨骼动画 UVAnimator: ...

  4. creator小功能----关于帧动画Animation和骨骼动画Skeleton一些有趣的东西

    动画是app中经常要用到的,尤其是游戏中,可以增强表现效果. 那么在creator中,怎么使用和实现动画效果呢? 动画获取的方式: 第一种,编辑器绑定 //1.编辑器绑定anim: {type: cc ...

  5. layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结二

    一.角色序列帧.ani动画的制作 1.在项目管理器中创建动画文件 2.创建动画模板,编辑动效名称 3.编辑序列帧动画 .ani格式动画的代码控制 1.动画加载loadAnmition() 2.播放与停 ...

  6. 3D动画概述暨骨骼动画实现

    引言 本文论述了3D领域内的常见动画类型的运作机制.不同于其他文章简单的罗列和介绍每种类型的3D动画,本文尝试以一种优化演进的思路对动画运作机理进行递进式推演,在这个过程中自然而然的推导出常见的几种3 ...

  7. 《Cocos Creator 代码编辑器》插件使用说明

    cocos 代码编辑插件一览: 使用教程: 使用前:日常工作中游戏脚本通常绑定在节点上,需要修改脚本代码时需打开第三方代码编辑器进行编辑.  使用后:使用本插件后点击场景的节点可直接在creator上 ...

  8. Spine2D动画系统添加骨骼动画事件帧

    spine是基于骨骼的2D动画系统,相比较与模型动画各有利弊.在做项目时,有时候需要在spine特定骨骼出添加动画帧,类似于模型动画的Animation动画帧一样. 接下来就是 spine骨骼的2D动 ...

  9. 游戏引擎的动画系统及骨骼动画原理

    一.<游戏引擎架构>动画系统 动画的几种分类 <游戏引擎架构>中简单介绍了几种动画种类.用途以及优劣,在<计算机动画算法与技术>中详细介绍了各种动画的算法原理: 精 ...

最新文章

  1. 云服务器 ECS快速入门:远程连接 ECS 实例
  2. 扎心一问:分库分表就能无限扩容吗?
  3. JAVA并发-从缓存一致性说volatile 讲的很好
  4. express+vue+mongodb+session 实现注册登录
  5. 二进制漏洞挖掘_漏洞挖掘的艺术-面向二进制的静态漏洞挖掘
  6. Java实现redis事务
  7. Un*、IdL分别突变情况下双闭环直流调速系统仿真
  8. 大学学习路线规划建议贴
  9. 隐藏桌面上计算机图标不见了怎么办,电脑的快捷图标不见了怎么办
  10. linux内核协议栈 TCP数据发送之发送窗口
  11. Python用最简单的代码画出一箭穿心
  12. Android:EditText 设置弹出数字输入法键盘
  13. Chrome插件开发-右键菜单开启页面编辑
  14. 【已解决】华为P10禁止系统更新EMUI9
  15. 新媒体中的淘宝电商运营资源
  16. Oracle项目管理系统之任务督办及收发文
  17. Confluence7.4安装
  18. 罗马数字转阿拉伯数字两种实现
  19. 算法基础——蓝桥杯(python实现,实际上大多数用c++更明白易懂)(第一部分,共12个小题)
  20. 数据库保存表情符号(emoji)

热门文章

  1. 一位深圳创业者说:别找腾讯的技术,难伺候
  2. ORA-01436: CONNECT BY loop in user data
  3. LintCode 题目:尾随零
  4. Realtek HD Audio Driver安装失败的解决方法
  5. 校园社交app开发软件能够让用户用更为方便快捷方式交到朋友
  6. STM32F4 读写 AT24C512问题
  7. 百度知道芝麻将,申请资格权限介绍奖惩制度(简剖)
  8. 邦彦技术上市首日跌15%:公司市值37亿 劲牌是二股东
  9. STC单片机仿FX1N的PLC.需要的直接拍,包含原理图,PCB和源程序
  10. 趣图一张:《几何原本》拓扑结构图