您如何处理 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*/ }
}
(请原谅我的 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*/ }
}