查看: 2035|回复: 7

请问OSG事件处理器如何设置已经处理?

[复制链接]

该用户从未签到

发表于 2011-12-27 16:21:22 | 显示全部楼层 |阅读模式
大家好,我往view中添加了两个EventHandler,但我希望触发的时候只有一个执行处理代码,所以在第一个EventHandler的handle方法中返回了true,而且可以肯定return true这一句已经执行的情况下,第二个EventHandler的handle还是会执行,为什么会这样呢?
view->addEventHandler(new FirstHandler());
view->addEventHandler(new SecondHandler());

该用户从未签到

发表于 2011-12-28 09:15:07 | 显示全部楼层
如果第二个Handler没有判断ea.getHandled()的话,那么返回true也是没有意义的

该用户从未签到

 楼主| 发表于 2011-12-28 09:26:07 | 显示全部楼层
原来如此,谢谢array~

该用户从未签到

 楼主| 发表于 2011-12-28 09:39:29 | 显示全部楼层
array 发表于 2011-12-28 09:15
如果第二个Handler没有判断ea.getHandled()的话,那么返回true也是没有意义的

另外请教一下array,如果第一个handler返回了true
第二个handler判断ea.getHandled()为true的话是应该返回true还是返回false?
如果它返回false,而还有第三个handler的话,那第三个判断ea.getHandled()是true还是false?

该用户从未签到

发表于 2011-12-28 10:28:11 | 显示全部楼层
我记得不需要手动判断,osg已经给你判断了!直接返回true就行了吧

该用户从未签到

发表于 2011-12-28 10:35:27 | 显示全部楼层
本帖最后由 fenma3422 于 2011-12-28 10:44 编辑

看一下,GUIEventHandler类中的 inline bool handleWithCheckAgainstIgnoreHandledEventsMask(const GUIEventAdapter& ea,GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv)函数,已经判断然后才执行handle。已经返回true的,不处理也不影响!

该用户从未签到

 楼主| 发表于 2011-12-28 10:55:35 | 显示全部楼层
fenma3422 发表于 2011-12-28 10:28
我记得不需要手动判断,osg已经给你判断了!直接返回true就行了吧

可能版本不同吧,我这里好像确实是要判断才行。

该用户从未签到

发表于 2011-12-28 11:33:36 | 显示全部楼层
你看一下代码吧,我这是2.8的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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