查看: 1557|回复: 4

【求教】BasicAnimationManager的停止问题

[复制链接]

该用户从未签到

发表于 2012-5-23 16:46:03 | 显示全部楼层 |阅读模式
stopAnimation()控制的是动画暂停,我想令读入的模型恢复到初始的站立状态,有什么好办法么?
osg新手,个人猜测用模型Node节点的回调函数来实现? 有谁能帮忙指点下么?

该用户从未签到

发表于 2012-5-24 13:56:00 | 显示全部楼层
可以尝试用Animation::resetTargets()

该用户从未签到

 楼主| 发表于 2012-5-24 15:52:38 | 显示全部楼层
array 发表于 2012-5-24 13:56
可以尝试用Animation::resetTargets()

Hi array,

我直接调用对应的Animation的resetTargets()并没有成功达到效果,并且模型动画都没有暂停(我对Animationlist中所有的Animation都做了一次resetTargets)。我想问一下,这和我读入的FBX模型动画本身有关系么,还是就是我的控制代码有问题呢?


另setPlaymode中 ONCE和STAY有什么区别呢,书上写的是ONCE表示播放一次后结束,STAY则是播放一次后停留在最后时刻处,可是我没有感觉到区别呢,我设置成ONCE也都停留在最后的时刻,这也就是我上文遇到的问题



下面是stopAnimation()的代码

bool BasicAnimationManager::stopAnimation(Animation* pAnimation)
{
    // search though the layer and remove animation
    for( AnimationLayers::iterator iterAnim = _animationsPlaying.begin(); iterAnim != _animationsPlaying.end(); ++iterAnim )
    {
        AnimationList& list = iterAnim->second;
        for (AnimationList::iterator it = list.begin(); it != list.end(); ++it)
            if( (*it) == pAnimation )
            {
                (*it)->resetTargets();
                list.erase(it);
                return true;
            }
    }
    return false;
}
这个函数本身也对Animation进行了resetTargets的操作,这是不是说明resetTargets函数并不能实现我想达成的效果呢?

求帮忙解答哈

该用户从未签到

发表于 2012-5-24 16:23:44 | 显示全部楼层
那么看看setStartTime()吧,osgAnimation的接口有些混乱~~阅读一下它的源代码是最好的选择

该用户从未签到

发表于 2016-5-25 20:06:23 | 显示全部楼层
源码各种不好修改。。。
我用了一个取巧的方法,将动画再度播放,然后再通过一个线程跑了个5毫秒,然后再将动画停止,这样动画就停止在"reset"的状态
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表