查看: 2007|回复: 10

求助,osgAnimation中怎样实现暂停和继续的功能?

[复制链接]

该用户从未签到

发表于 2011-3-9 15:20:03 | 显示全部楼层 |阅读模式
osgAnimation::AnimationList machineAnimationlist = machineAnimation->getAnimationList();


machineAnimation->dirty();



for (unsigned int i = 0;i < machineAnimationlist.size();i++)

{

machineAnimation->playAnimation(machineAnimationlist[i]);

};
                                可让节点开始运动。

machineAnimation->stopAll();
                                可让节点停止运动
                                求助是否有方法实现让节点从上次停止的地方开始运动直至完成,即运动的暂停和继续功能?

该用户从未签到

发表于 2011-3-10 08:58:58 | 显示全部楼层
  1. bool  stopAnimation (Animation *pAnimation)
复制代码

该用户从未签到

 楼主| 发表于 2011-3-10 11:01:06 | 显示全部楼层
回复 2# array

谢谢锐哥,我试了,此函数能实现暂停的功能。      我想问的是:有什么方法实现让物体从用户上一次暂停的位置开始让它运动直至完成。
我使用的方法如下:

   
osgAnimation::BasicAnimationManager* machineAnimation =
dynamic_cast<osgAnimation::BasicAnimationManager*>(machineChild->getUpdateCallback());

if(!machineAnimation) return false;


osgAnimation::AnimationList machineAnimationlist = machineAnimation->getAnimationList();


for (unsigned int i = 0;i < machineAnimationlist.size();i++)

{

machineAnimation->playAnimation(machineAnimationlist);

}
这样物体又重新开始运动了,我想要的是物体从上一次停下的位置开始运动。

该用户从未签到

发表于 2011-3-10 14:04:21 | 显示全部楼层
您可以通过Animation::setStartTime()来设置启动的时刻,也可以通过getStartTime()获取当前时刻

该用户从未签到

发表于 2011-3-10 19:30:09 | 显示全部楼层
了解了~

该用户从未签到

 楼主| 发表于 2011-3-14 11:56:55 | 显示全部楼层
谢谢版主们,我初步实现了暂停和继续的功能,首先初始化
for(int i = 0; i < sheetAnimationlist.size(); i++)
{
     m_sheetAnimaTime[i] = 0
}
在按下继续按钮时执行:
                                for (unsigned int i = 0;i < sheetAnimationlist.size();i++)
                                {
                                        sheetAnimation->playAnimation(sheetAnimationlist[i]);
                                        sheetAnimationlist[i]->setStartTime(m_sheetAnimaTime[i]);
                                }
在按下暂停按钮时执行:
                                for (unsigned int i = 0;i < sheetAnimationlist.size();i++)
                                {
                                        m_sheetAnimaTime[i] = sheetAnimationlist[i]->getStartTime();
                                        sheetAnimation->stopAnimation(sheetAnimationlist[i]);
                                }
这样能达到继续和暂停的效果,但继续开始的位置相对暂停处的位置有些退后,功能演示效果很不流畅,请问版主我在代码实现方面是否有问题?

该用户从未签到

发表于 2011-3-15 23:46:27 | 显示全部楼层
虽然不大懂,但是了解了。

该用户从未签到

发表于 2011-3-16 08:41:51 | 显示全部楼层
您的m_sheetAnimaTime是否设置的不对,应该取得当前的运行时间

该用户从未签到

 楼主| 发表于 2011-3-16 10:25:18 | 显示全部楼层
我在osg中没有找到获取当前运行时间的函数。

该用户从未签到

发表于 2011-3-16 12:38:32 | 显示全部楼层
viewer.getFrameStamp()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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