osgAnimation.UpdateActionVisitor
是一个遍历场景图并更新动画状态的访问者类。它使用Visitor模式,可以遍历场景图中的节点并更新所有动画。
该类通过继承自osg::NodeVisitor
类实现访问者模式,重写apply(osg::Node& node)
方法来处理每个节点。
osg::NodeVisitor
osgAnimation.UpdateActionVisitor
UpdateActionVisitor(osgAnimation::AnimationManagerBase* manager, double referenceTime = 0.0);
构造函数,创建osgAnimation::UpdateMatrixTransform等。
osgAnimation::PlayAnimationVisitor* createPlayAnimationVisitor(const std::string& name);
创建osgAnimation::PlayAnimationVisitor,用于播放指定名称的动画。
osgAnimation::Action* getAction(const std::string& name);
获取指定名称的osgAnimation::Action。
virtual void apply(osg::Node& node) override;
应用遍历访问者模式,处理每个节点并更新动画状态。
double getAnimationTime() const;
获取动画时间。
void setAnimationTime(double time);
设置动画时间。
bool getPause() const;
获取是否暂停状态。若暂停,则不更新动画。
void setPause(bool pause);
设置是否暂停状态。
double getReferenceTime() const;
获取参考时间。
void setReferenceTime(double time);
设置参考时间。
bool getReset() const;
获取是否重置状态。若重置,则重新从参考时间开始更新动画。
void setReset(bool reset);
设置是否重置状态。
无。
double _animationTime;
动画时间。
double _referenceTime;
参考时间。
osg::ref_ptr<osgAnimation::AnimationManagerBase> _manager;
osgAnimation::AnimationManagerBase指针。
bool _pause;
是否暂停状态。
bool _reset;
是否重置状态。
std::map<std::string, osg::ref_ptr<osgAnimation::PlayAnimationVisitor> > _playVisitorMap;
osgAnimation::PlayAnimationVisitor缓存,用于优化动画播放性能。
std::map<std::string, osg::ref_ptr<osgAnimation::Action> > _actionMap;
osgAnimation::Action缓存,用于优化动画更新性能。