查看: 1264|回复: 4

处理键盘事件 无反应

[复制链接]

该用户从未签到

发表于 2014-12-23 16:06:32 | 显示全部楼层 |阅读模式
书上的一个例子 但是按下键盘没有反应  代码贴出来  麻烦大家帮忙看看
#include <osg/Switch>
#include <osgDB/ReadFile>
#include <osgGA/GUIEventHandler>
#include <osgViewer/Viewer>

class KeyboardHandler:public osgGA::GUIEventHandler{
public:
        virtual bool hanle(const osgGA::GUIEventAdapter& ea,
                osgGA::GUIActionAdapter& aa,
                osg::Object*,osg::NodeVisitor*)
        {
                osgViewer::Viewer* viewer=dynamic_cast<osgViewer::Viewer*>(&aa);
                if(!viewer) return false;

                switch (ea.getEventType())
                {
                case osgGA::GUIEventAdapter::KEYDOWN:
                        if(ea.getKey()==osgGA::GUIEventAdapter::KEY_Space){
                                int width=ea.getWindowWidth();
                                int height=ea.getWindowHeight();
                                viewer->requestWarpPointer(width*0.5,height*0.5);

                        }//if
                        else {
                                osg::Switch* root=dynamic_cast<osg::Switch*>(viewer->getSceneData());
                                if(!root) return false;

                                if (ea.getKey()=='1')
                                {
                                        root->setValue(0,true);
                                        root->setValue(1,false);
                                }//if
                                else if (ea.getKey()=='2')
                                {
                                        root->setValue(0,false);
                                        root->setValue(1,true);
                                }
                                return true;
                        }//else
                        break;
                default:break;
                }//switch
                return false;
        }//handle
};


int main(int argc,char** argv){

        osg::ref_ptr<osg::Switch> root=new osg::Switch;
        root->addChild(osgDB::readNodeFile("cessna.osg"),true);
        root->addChild(osgDB::readNodeFile("cessnafire.osg"),false);

        osgViewer::Viewer viewer;
        viewer.setSceneData(root.get());
        viewer.addEventHandler(new KeyboardHandler);
        return viewer.run();

}

该用户从未签到

 楼主| 发表于 2014-12-23 16:07:47 | 显示全部楼层
我在KeyboardHandler类中设置了断点  发现根本没有运行KeyboardHandler类中的东西 直接跳过去了  

该用户从未签到

发表于 2014-12-25 11:37:10 | 显示全部楼层
virtual bool hanle(const osgGA::GUIEventAdapter& ea,
                osgGA::GUIActionAdapter& aa,
                osg::Object*,osg::NodeVisitor*)


这个虚拟函数与父类的声明是否一致?不一致绝对不会进入

该用户从未签到

 楼主| 发表于 2014-12-26 16:33:52 | 显示全部楼层
fenma3422 发表于 2014-12-25 11:37
virtual bool hanle(const osgGA::GUIEventAdapter& ea,
                osgGA::GUIActionAdapter& aa,
...

一样的  怎么办?

该用户从未签到

发表于 2014-12-30 09:09:29 | 显示全部楼层
我是说你派生错了,看osg的例子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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