查看: 2364|回复: 9

osgGA::GUIEventHandler的KEYDOWN

[复制链接]

该用户从未签到

发表于 2011-5-16 16:37:26 | 显示全部楼层 |阅读模式
今天做了个osgGA::GUIEventHandler 的小例子,尽然发觉KEYDOWN事件执行2次,对应的KEYUP事件执行1次,怪了

  1. class TestHandler : public osgGA::GUIEventHandler
  2. {
  3. public:
  4.     TestHandler(){}
  5.     ~TestHandler(){}
  6.     bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
  7.     {
  8.         osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
  9.         //if (!viewer) return false;
  10.         switch(ea.getEventType())
  11.         {
  12.             case(osgGA::GUIEventAdapter::KEYUP):
  13.             {
  14.     osg::notify(osg::NOTICE)<<"KEYUP"<<std::endl;               
  15.     return false;
  16.             }
  17.    case(osgGA::GUIEventAdapter::KEYDOWN):
  18.    {
  19.     osg::notify(osg::NOTICE)<<"KEYDOWN"<<std::endl;
  20.    }
  21.             case(osgGA::GUIEventAdapter::PUSH):
  22.             case(osgGA::GUIEventAdapter::MOVE):
  23.             {
  24.                 return false;
  25.             }
  26.             case(osgGA::GUIEventAdapter::RELEASE):
  27.             {
  28.                 return true;
  29.             }   
  30.             default:
  31.                 return false;
  32.         }
  33.     }
  34. };
  35. //main函数中
  36. osg::ref_ptr<osgViewer::View> view1=new osgViewer::View;
  37. view1->addEventHandler( new TestHandler());

  38. osgViewer::CompositeViewer *viewer
  39. //将视口添加到复合视图
  40. viewer->addView(view1);
复制代码

难道是复合视图的原因?

该用户从未签到

发表于 2011-5-17 09:12:22 | 显示全部楼层
不应当有这种情况,能否提供您的全部实例代码

该用户从未签到

 楼主| 发表于 2011-5-17 12:17:24 | 显示全部楼层
array,OSG版本是osg-2.8.2-vc80sp1
Test.rar (5.51 KB, 下载次数: 68)

该用户从未签到

 楼主| 发表于 2011-5-17 18:54:38 | 显示全部楼层
本帖最后由 湖面之舟 于 2011-5-17 19:06 编辑

呵呵,KEYUP和KEYDOWN中都return就OK了,还是自己迷糊

该用户从未签到

 楼主| 发表于 2011-5-17 20:19:57 | 显示全部楼层
晕,以为解决了,还是有问题。
程序对按键的响应还是乱七八糟的,我觉得标准的应该是
(KEYDOWN....KEYDOWN.....KEYDOWN)->KEYUP

以下是实验的顺序,完全跟想像的不一样
按键编号(J键) 事件次序
1       KEYDOWN KEYUP KEYDOWN
2                     KEYDOWN  KEYDOWN KEYUP
3(持续按下再松开)                    KEYDOWN   KEYDOWN KEYDOWN KEYDOWN KEYDOWN KEYDOWN KEYUP KEYDOWN KEYDOWN KEYDOWN KEYDOWN

该用户从未签到

发表于 2011-5-18 10:54:25 | 显示全部楼层
这个跟你按键时间有关系~~可能在这段时间执行了两次事件回调

该用户从未签到

发表于 2011-5-18 12:29:11 | 显示全部楼层
关于这个问题我会尽快给你答复,今天回去我写个测试

该用户从未签到

发表于 2011-5-18 15:33:18 | 显示全部楼层
你的问题我已经回复了,请关注我的帖子

该用户从未签到

 楼主| 发表于 2011-5-19 11:08:41 | 显示全部楼层
问题依然未得到解决,主要可能是我没明白原理

该用户从未签到

发表于 2011-5-21 23:39:54 | 显示全部楼层
我没有发现过您说的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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