码迷,mamicode.com
首页 > 其他好文 > 详细

解决Spine骨骼混合动画错乱问题

时间:2015-01-12 20:59:45      阅读:1067      评论:0      收藏:0      [点我收藏+]

标签:

  Spine是一个很好的制作2D骨骼动画的软件,其中提供的混合(mix)动画功能可以很柔和过度两个不同的动画,但在混合时期,稍有不善,非常容易出现各种错乱。在Spine2D骨骼动画群上,有人提出全K帧、K透明轴等等方法,这些方法往往只是恰好解决了一些问题,但还有相当一部分潜在的问题还是可能发生的。

  在使用过程中,我发现Spine的错乱问题主要表现在以下两个方面:

  1. Slot位置下,A动画中有abcd四个时间轴,而B动画只有abc三个时间轴,那么从A切换到B时,切换时d轴的状态(纹理或色彩)可能会残留到B动画上(如A是攻击动画,B是行走动画,d是特效轴)。

  2. Slot位置下,A动画与B动画混合时期(●表示关键帧):

    A:●---------------------------●------

    B:                              ●-------------------------------

                 |混合时期|

    在这种状态下,由于B动画设置了纹理之后,A动画又设置了纹理,混合时间之后,Slot位置下的纹理是A动画的纹理,这时候纹理错乱了,这种不能通过K帧解决,因为需要注意的问题太多了。

 

  如果以上两个问题都解决了,那么混合动画基本就没有什么问题了(目前我项目中还没有发现其它问题)。

  对于问题1,原则上,A动画有的轴,B动画也必须中,如果B动画中没有,则自动为B动画以setup pose状态为基准生成这条轴(纹理、变换、色彩等)。补齐及二制作转换脚本请见github

  对于问题2,修改spine-runtime中的Animation.c文件中函数_spAttachmentTimeline_apply中的代码:将"if (self->frames[frameIndex] < lastTime) return;"改为"if (self->frames[frameIndex] < lastTime && 1 - alpha <= FLT_EPSILON) return;", 并且在文件开始部分添加"#include <float.h>"。alpha(0~1)参数表示是混合进度,原理很简单,在混合时期一直让新的动画轴去设置纹理。

解决Spine骨骼混合动画错乱问题

标签:

原文地址:http://www.cnblogs.com/zhongfq/p/4219653.html

(0)
(2)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!