查看: 1644|回复: 5

关于键盘虚拟键值的问题

[复制链接]

该用户从未签到

发表于 2010-3-18 10:19:33 | 显示全部楼层 |阅读模式
我看的《OpenSceneGraph三维渲染引擎设计与实践》这本书自定义操作器场景漫游这个例子,

然后有一个功能就是按W键或者上箭头可以往前走,
检测键盘按了W或者这上箭头的代码是这样:
if(ea.getkey() == 0xFF52 || ea.getkey() == 0x57 ||ea.getkey() == 0x77 )

我查的键盘虚拟键值编码表是
W = 87(就是0x57)
w = 119 (就是0x77)
但是上箭头是0x26。。。 不是那个0xFF52

我在网上找的键值定义都是:
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键

但是osg里面好像分别是
0xFF51
0xFF52
0xFF53
0xFF54

请问这是怎么定义的?

该用户从未签到

 楼主| 发表于 2010-3-18 11:23:59 | 显示全部楼层
又发现一个问题。
我自己写了一段代码,按P键来开关碰撞检测,但是测试的时候发现关不掉。。。于是我加上了一段cout观察一下:

switch(ea.getEventType())
case(osgGA::GUIEventAdapter::KEYDOWN):
                {
                        //碰撞检测开关
                        if(ea.getKey() == 80 || ea.getKey() == 112) //就是P键
                        {
                                m_bPeng = !m_bPeng;
                                std::cout << "123" << std::endl;
                                return true;
                        }
                      }

结果我发现每按一次P,会输出两行“123”,就意味着m_bPeng非了两次,当然没用了。。。。
请问这是什么原因……

该用户从未签到

发表于 2010-3-18 12:09:10 | 显示全部楼层
改成KEYUP试试!!

该用户从未签到

发表于 2010-3-18 12:21:18 | 显示全部楼层
首先,《OpenSceneGraph三维渲染引擎设计与实践》这本书并没有有关自定义漫游器的内容,也许您看的是其他的教程?

宏定义本身没有什么特别的,只是不同的开发者所选用的不同数字而已。不过ea.getkey() == 0xFF52这样的表达显然很不直观,建议您直接使用ea.getkey() == osgGA::GUIEventAdapter::KEY_Up这样的方法

该用户从未签到

 楼主| 发表于 2010-3-18 16:11:38 | 显示全部楼层
改成KEYUP试试!!
tianxiao888 发表于 2010-3-18 12:09


谢谢啊,这样就对了,不过为什么呢?





首先,《OpenSceneGraph三维渲染引擎设计与实践》这本书并没有有关自定义漫游器的内容,也许您看的是其他的教程?


是《OpenSceneGraph三维渲染引擎编程指南》。。。复制的时候没注意。。。
谢谢array的建议~~

该用户从未签到

发表于 2010-3-18 17:50:58 | 显示全部楼层
因为你按一次键要连续产生很多次的keydown事件,keyup只有一次
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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