自从我使用Glut进行键盘输入处理以来已经有一段时间了,但我觉得键盘回调函数曾经提供了一个未经修改的Key参数 - 我可能记得错了。
换句话说,按“r”返回一个小写的“r”字符,而按SHIFT +“r”仍然返回一个小写的“r”而不是一个大写的“R”。现在情况并非如此(可能从未如此),因为使用修饰键(SHIFT,CONTROL,ALT)实际上修改了发送到回调函数的键。我一直试图找到一种获取原始未修改值的方法,但此后一直没有运气。
有没有办法从回调函数中访问未修改的键盘值,或者我是否需要手动反转修改以获得正确的键值?
glutKeyboardFunc(keyDown);
...
void Game::keyDown(unsigned char key, int mouseX, int mouseY)
{
switch (key)
{
case 'r':
{
cout<<"Called when 'r' is pressed"<<endl;
cout<<"Is NOT called when SHIFT is the modifier"<<endl;
break;
}
case 'R':
{
cout<<"Called ONLY when 'r' is pressed with SHIFT"<<endl;
cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
break;
}
case 18:
{
cout<<"Called ONLY when 'r' is pressed with CONTROL"<<endl;
cout<<"Is NOT called when 'r' is pressed on its own"<<endl;
break;
}
}
}
非常感谢任何帮助或建议。
答案 0 :(得分:0)
您正在寻找此功能:
int glutGetModifiers(void);
您可以将结果分配给整数,并使用以下内容进行检查:
GLUT_ACTIVE_SHIFT
GLUT_ACTIVE_CTRL
GLUT_ACTIVE_ALT
一个小例子
int modifier = glutGetModifiers();
if (modifier == GLUT_ACTIVE_CTRL)
//code
else
//code
}
另请注意,只应在处理键盘或鼠标输入事件的函数内调用此函数。