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

How do you handle case sensitivity in OpenSceneGraph keyboard input events?

(请原谅我的 shorthand 因为这是凭记忆)我的代码类似于:

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。

当您按下一个键时,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*/ }
}