osg.Observer
是 OpenSceneGraph 中的一个观察者类,用于监视 osg::Referenced
类中的状态变化。
Observer()
构造一个 Observer
对象,初始状态下该对象未关联任何 Referenced
。
Observer(const Referenced* observed)
构造一个 Observer
对象,该对象关联到 observed
指定的 Referenced
对象。
bool operator()(const Referenced& object, const osg::Observer& observer) const
当关联的 Referenced
对象状态发生变化时,会自动调用该成员函数。
参数
object
:发生变化的 Referenced
对象。observer
:关联到该 Referenced
对象的 Observer
对象。返回值
true
:表示观察者成功处理了 Referenced
对象状态的变化。false
:表示观察者未能处理 Referenced
对象状态的变化。void setObservedObject(const Referenced* observed)
将 Observer
对象关联到 observed
指定的 Referenced
对象。
const Referenced* getObservedObject() const
返回 Observer
对象当前关联的 Referenced
对象。如果 Observer
对象未关联任何 Referenced
,则返回 nullptr
。
void operator()(const osg::Referenced& object)
手动触发 Observer
对象对 Referenced
对象状态的检查。
继承 osg::Referenced
类,实现状态变化的方法。
class MyObject : public osg::Referenced
{
public:
virtual void doSomething() {}
virtual void setState(int state) { _state = state; }
virtual int getState() const { return _state; }
private:
int _state;
};
在需要监视该 Referenced
对象的地方创建一个 Observer
对象。
osg::ref_ptr<MyObject> myObject = new MyObject;
osg::Observer observer(myObject.get());
使用 myObject
对象,并在需要时修改其状态。
myObject->doSomething();
myObject->setState(1);
当 myObject
对象的状态发生变化时,系统会自动调用 observer
对象的回调函数。
class MyCallback : public osg::Referenced
{
public:
virtual bool operator()(const osg::Referenced& object, const osg::Observer& observer)
{
if (const MyObject* myObject = dynamic_cast<const MyObject*>(&object))
{
if (myObject->getState() == 1)
{
// 处理 myObject 对象的状态变化
return true;
}
}
return false;
}
};
osg::ref_ptr<MyCallback> myCallback = new MyCallback;
observer.addCallback(myCallback.get());