|
看教程里添加键盘鼠标的响应事件,好像都是通过viewer类的addEventHandler函数。如果在某个节点里添加了callback节点,就要先找到这个节点,然后再进行更改操作。比如这样:- bool ControlMan::handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
- {
- osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
- osg::ref_ptr<osg::Group> root = (osg::Group*)view->getSceneData();
- ManMove* mmov=dynamic_cast<ManMove*>(root->getChild(0)->getUpdateCallback());
- //Pick
- switch(ea.getEventType())
- {
- case osgGA::GUIEventAdapter::KEYDOWN:
- {
- switch(ea.getKey())
- {
- case 'w':
- {
- mmov->m_bWalk=true;
- return true;
- }
- case 's':
- {
- return true;
- }
- }
- }
- }
- return false;
- }
复制代码 这样的话我每次都要把这个节点找到才能进行更新操作,每次找这个节点的代码就要写一大堆,而且对移植性也非常不好。有什么办法可以绑在节点上而不是viewer上吗? |
|