如何在OpenSceneGraph键盘输入事件中处理区分大小写?

时间:2017-04-05 21:23:31

标签: c++ openscenegraph

(请原谅我的简写,因为这是来自内存)我的代码类似于:

bool myclass::handle(event ea){
  switch (ea.getEventType()){
    case(osgGA::KEYDOWN):
      switch (ea.getkey() )
      {
        case (osgGA::KEY_Lshift):
           down = true;
           break;
        case (osgGA::KEY_W):
           forward = true;
           break;
      }
      return false;

    case(osgGA::KEYUP){
      switch (ea.getkey() )
      {
        case (osgGA::KEY_Lshift):
           down = false;
           break;
        case (osgGA::KEY_W):
           forward = false;
           break;
      }
      return false;        
    }

我打印ea.getkey(),当我按'w'时,我得到了前进的预期行为。但是,如果我按下'shift'然后放开'w',我会得到我的调试:“KEYUP:W”。请注意它是大写的,我继续前进,直到按下并释放小写的“w”。

我是否希望使用基本的C ++函数将所有内容转换为小写?我只是尝试使用标准的WASD机芯,在我的环境中上下移动时,使用Space / L-shift。

1 个答案:

答案 0 :(得分:2)

当您按某个键时,osg会创建一个带有相应键码的事件,对于一个字母或其相应的大写字母代码是不同的。
osgGA::KEY_W它只是一个枚举值,对应于小写'w'(119 ascii代码),而'W'代码为87。

因此,如果您想获得小写或大写的按键,只需写下类似的内容:

if (ea.getEventType() == osgGA::GUIEventAdapter::KEYDOWN)
{
     if (ea.getKey() == osgGA::GUIEventAdapter::KEY_W || ea.getKey() == 'W')
     { /*code when either w or W is pressed*/ }
}