(请原谅我的简写,因为这是来自内存)我的代码类似于:
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。
答案 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*/ }
}