查看: 870|回复: 1

路径动画判断到达终点的问题

[复制链接]

该用户从未签到

发表于 2013-12-18 08:54:45 | 显示全部楼层 |阅读模式
各位大牛,求指导:我在程序中加载了一个人物动画,我想在开始路径回调的时候播放动画,然后到达路径终点后停止动画,但是不知道如何判断节点是否到达路径终点!是要重写AnimationPathCallback,然后在里面加上判断条件?还是AnimationPathCallback本身就有方法判断已经到达终点?
  1.         osg::AnimationPath* CreatePath()
  2.         {
  3.                 osg::Vec3 yoz(1.0,0.0,0.0),xoz(0.0,1.0,0.0),xoy(0.0,0.0,1.0);
  4.                 osg::ref_ptr<osg::AnimationPath> path = new osg::AnimationPath;

  5.                 path->insert(0.0,osg::AnimationPath::ControlPoint(osg::Vec3(0.0,0.0,0.0),osg::Quat(0.0,yoz,0.0,xoz,0.0,xoy)));
  6.                 path->insert(2.0,osg::AnimationPath::ControlPoint(osg::Vec3(0.0,0.0,0.0),osg::Quat(osg::PI,yoz,0.0,xoz,0.0,xoy)));
  7.                 path->insert(4.0,osg::AnimationPath::ControlPoint(osg::Vec3(0.0,0.0,0.0),osg::Quat(osg::PI,yoz,0.0,xoz,osg::PI,xoy)));
  8.                 path->insert(6.0,osg::AnimationPath::ControlPoint(osg::Vec3(0.0,0.0,0.0),osg::Quat(0.0,yoz,0.0,xoz,osg::PI,xoy)));
  9.                 path->insert(8.0,osg::AnimationPath::ControlPoint(osg::Vec3(0.0,0.0,0.0),osg::Quat(0.0,yoz,0.0,xoz,0.0,xoy)));

  10.                 return path.release();
  11.         }
  12.        
  13.         bool handle(const osgGA::GUIEventAdapter&ea,osgGA::GUIActionAdapter& aa)
  14.         {
  15.                 switch(ea.getEventType())
  16.                 {
  17.                 case osgGA::GUIEventAdapter::KEYDOWN:
  18.                         {
  19.                                 if (ea.getKey()=='w')
  20.                                 {
  21.                                         AnimationManagerFinder finder;
  22.                                         node_walk->accept(finder);
  23.                                         const osgAnimation::AnimationList& animations = finder._am->getAnimationList();
  24.                                         finder._am->playAnimation( animations[0].get() );

  25.                                         osg::AnimationPath* path = CreatePath();
  26.                                         path->setLoopMode(osg::AnimationPath::NO_LOOPING);
  27.                                         pat->setUpdateCallback(new osg::AnimationPathCallback(path));
  28.                                 }
  29.                         }
  30.                         break;
  31.                 default:
  32.                         break;       
  33.                 }
  34.                 return false;
  35.         }
复制代码

该用户从未签到

发表于 2013-12-25 10:02:09 | 显示全部楼层
可以自己根据getAnimationTime()以及路径的最终时间来判断一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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