cocos2dx3.0无法取消Armatrue骨骼动画中的补间效果问题的解决办法

cocos2d-x 3.0正式版本已经放出下载了。

但是这个版本播放Armature动画有一个很奇怪的现象。

使用cocostudio 动作编辑器编辑Aramature动画的时候,把补间动画给取消掉,在动作编辑器和场景编辑器里显示都是没问题的,而到了正式运行的时候,发现补间动画还在。

这在骨骼动画里当然不会有什么明显的体现,但是到了帧动画里面,如果对关键帧的位置进行过调整,程序根据你关键帧的移动额外增加很多补间帧,这些帧会导致动画播放的时候不停的在跳动!

究其原因是cocos2d-x 3.0存在问题,使得无论你是否取消补间动画,都会以补间动画的形式播放。


怀着试试看的心态,将动画放到cocos2d-x 2.2.3中播放,结果发现动画是正常播放的,并没有补间动画的存在。

这也就意味着cocostudio导出的格式是没问题的,而问题应该出在cocos2d-x 3.0的身上。


通过VS里的断点调试,找到了对Armature骨骼动画数据进行处理的CCDatas.cpp文件。



类里面有一个 FrameData::copy 函数



通过分析发现,这个copy函数居然漏掉了isTween的处理,isTween变量默认是正的,而isTween正是判断有没有补间动画的变量。

也就是说程序收到的永远是:你要求他播放补间动画!!

isTween处理的相关代码加入。

isTween = frameData->isTween;

如下图:



保存后重新编译执行,发现Armature动画已经能正常播放了,补间动画没有出现,问题解决!


附:

修改后的copy函数如下:

void FrameData::copy(const BaseData *baseData)
{
    BaseData::copy(baseData);
    
    if (const FrameData *frameData = dynamic_cast<const FrameData*>(baseData))
    {
        duration = frameData->duration;
        displayIndex = frameData->displayIndex;
        
        tweenEasing = frameData->tweenEasing;
        easingParamNumber = frameData->easingParamNumber;
        
        CC_SAFE_DELETE(easingParams);
        if (easingParamNumber != 0)
        {
            easingParams = new float[easingParamNumber];
            for (int i = 0; i<easingParamNumber; i++)
            {
                easingParams[i] = frameData->easingParams[i];
            }
        }

        blendFunc = frameData->blendFunc;
		/*
		cocos2dx 3.0 BUG,进行帧数据copy的时候漏掉了isTween
		而isTween默认值为true,导致Armature无论在cocostudio中如何设置,实际播放时都一直存在补间
		**/
		isTween = frameData->isTween;
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值