spine动画融合与动画叠加
spine动画融合与动画叠加
一.动画融合setMix
1.概述:两个动作之间的平滑过渡

参数duration为需要多少时间从fromAnimation过渡到toAnimation,过渡时间为动画重叠时间。
下图为动作切换时的情况(setAnimation),左红线为切换动作时刻,两个红线之间为动作切换时间,这之间动画播放为A与B的混合,A和B所占的权重是不断变化的,从A占的权重从100到0,B占的权重从0到100。右红线之后为动作B完全播放。

图1
下图是A动作后有B动作的情况(addAnimation)

图2
下图为错误的示例

图3
上图是错误,融合不是从A的切换时帧情况过渡到B的的第一帧,而是重叠过渡的。再说一遍,在动画的过渡过程中,A和B所占的权重是不断变化的,从A占的权重从100到0,B占的权重从0到100.下面的代码会证明这件事情
2.代码
(1)源码:

可以看到,如果有动作融合,会先spAnimation_apply(preAni)再spAnimation_mix(curAni, alpha)

那么怎么证明经过这两个变换,动画的权重是由apha值分配的呢?以下面的TransLate平移变换为例
(2)推导,证明动画的权重由apha决定:
平移变换的源码如下:

定义几个变量:
d1:preAni(之前动作)使原始骨骼x位置的改变值
d2:curAni(目前动作)使原始骨骼x位置的改变值
originX: Tpose中骨骼的x位置(原始位置)
红框中的代码,把+=换成=,代码变为

等式右面的bone->x为spAnimation_apply(preAni)后的值,即d1 + originX;
又知d2 = [prevFrameX + (self->frames[frameIndex + TRANSLATE_FRAME_X] – prevFrameX)*] * percent;
bone->data->x 为 originX
所以:
bone->x = (originX +d2 -(d1 + originX))*alpha + (d1 + originX)
= (d2-d1)*alpha + (d1 + originX)
= originX + alpha * d2 + (1 - alpha)*d1
bone->x= originX + alpha * d2 + (1 - alpha)*d1
3.demo
官方的动画walk动作

官方动画的jump动作

不融合
,动作切换时有明显的生硬效果

融合0.2s,walk快播放完了才跳起

融合时间0.7s,
walk刚开始,便切换成jump动作

二.动画叠加(trackIndex)
1.概述:
多层动画叠加,上层动作会覆盖(同一骨骼有动画,若上层骨骼没有动画,下层动画还是正常播放)下层动作

trackIndex为动画的层数。
2.代码:
还是上图的代码,可以看到for循环中遍历了所有的tracks,后面的tracks会覆盖前面的动画。
3.demo:
官方的打手枪动画

walk动作index为0,jump动作index为1,jump动作会覆盖walk动作。


walk动作index为1,jump动作index为0,walk动作会覆盖jump动作。


walk和shoot的叠加,就是变走路边打手枪的效果


备注:spine代码截取的是spine官方代码Version 2.3
spine动画融合与动画叠加的更多相关文章
- Spine学习五- spine动画融合
在许多地方,都需要用到动画融合,unity的新版动画系统已经能够很方便的进行动画融合,那么使用spine的动画状态机的情况下,如何来进行动画融合呢? 官方有两种方案,一种是使用混合动作实现,另一种是使 ...
- AnimatorController动画融合树
通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不 ...
- jQuery animate方法开发极客标签Logo动画融合效果
在线演示 本地下载 jQuery的animate方法基础使用,演示如何生成一个jQuery animate方法开发极客标签Logo动画融合效果 相关代码录播:jQuery animate方法开发极客标 ...
- Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学
1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...
- 7种炫酷HTML5 SVG液态水滴融合分解动画特效
这是一组使用HTML5 SVG过滤器制作的炫酷液态水滴融合分解动画特效.这些SVG动画特效使一些HTML元素.如菜单.分页button.APP.选择框等元素的过渡动画像几粒水滴一样融合分解.效果很的酷 ...
- View动画和属性动画
在应用中, 动画效果提升用户体验, 主要分为View动画和属性动画. View动画变换场景图片效果, 效果包括平移(translate), 缩放(scale), 旋转(rotate), 透明(alph ...
- Unity3D Mecanim 动画系统骨骼动画问题解决方法
http://7dot9.com/2014/08/16/unity3d-mecanim%E5%8A%A8%E7%94%BB%E7%B3%BB%E7%BB%9F%E9%AA%A8%E9%AA%BC%E5 ...
- 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...
- Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)
在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Ani ...
随机推荐
- UIImagePickerController拍照/相册/录像/本地视频
1.导入系统库 #import <MobileCoreServices/MobileCoreServices.h> 2.遵守协议 <UIImagePickerControllerDe ...
- 【SSH项目实战三】脚本密钥的批量分发与执行
[SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...
- ajax天气查询
直接法伤代码: <!DOCTYPE html><html><head> <meta charset="utf-8" /> ...
- 深入浅出数据结构C语言版(3)——递归简论
相信学习过C语言的读者都已经接触过递归(不论是谭浩强的C程序设计还是C Primer Plus都有递归程序),本文就是对递归的基本原则进行简要介绍.首先,我们写一个基本的递归函数作为例子: int ...
- nmap安装过程
nmap是一个网络扫描和主机检测工具. 功能:1.扫描目标主机开放的端口 2.扫描目标主机特定端口是否关闭 3.路由跟踪(到目标主机所经过的网络节点及其通过时间) 4.扫描一个网段下的所有IP 5.探 ...
- Oracle数据块损坏的恢复实例
测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...
- C++—动态内存管理之深入探究new和delete
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...
- 01.Nodejs入门之Helloworld
说明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 1.新建文件夹helloworld demo, ...
- 【Spring】BeanFactory解析bean详解
在该文中来讲讲Spring框架中BeanFactory解析bean的过程,该文之前在小编原文中有发表过,要看原文的可以直接点击原文查看,先来看一个在Spring中一个基本的bean定义与使用. pac ...
- 老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具
老李分享:使用 Python 的 Socket 模块开发 UDP 扫描工具 poptest是业内唯一的测试开发工程师培训机构,测试开发工程师主要是为测试服务开发测试工具,在工作中要求你做网络级别的安全 ...