我可以用什么功能来检查Q按钮(或任何其他按钮是否被按下)以及为Q按钮指定这个按钮所需的值是什么?
答案 0 :(得分:2)
使用过剩需要定义键盘处理程序功能,并告诉GLUT使用它来处理击键。有点像:
bool is_q_pressed = false;
void KeyboardHandler(unsigned char key, int x, int y)
{
switch (key)
{
case "q":
case "Q":
is_q_pressed = !is_q_pressed;
if (is_q_pressed)
// do something... or elsewhere in program
break;
}
}
void KeyboardUpHandler(unsigned char key, int x, int y)
{
switch (key)
{
case "q":
case "Q":
is_q_pressed = false;
break;
}
}
int main()
{
// Other glut init functions...
...
// Keyboard handler
glutKeyboardFunc(KeyboardHandler);
// Keyboard up handler
glutKeyboardUpFunc(KeyboardUpHandler);
...
glutMainLoop();
return 0;
}
编辑:添加了对键盘输入的支持。使用全局变量并不是最佳实践,但GLUT几乎迫使您使用它们来跟踪程序状态。好处是你可以在你的程序中的任何地方使用全局变量(is_q_pressed)...就像在idle()中使用某些逻辑一样,或者在draw函数中绘制一些东西,如果按下那个键的话。
而且,正如@aslg所说,你可以制作一系列bool来跟踪每个按下的按键,检查他的想法答案:)
答案 1 :(得分:0)
你可以做的最简单的事情就是使用一个bool数组,其中包含足够的bool来包含256个常规键和特殊键(右键,左键等)。
bool keys[256];
使用KeyDown函数将匹配键设置为true,将KeyUp设置为false。
void KeyboardDown( int key, int x, int y ) {
if ( isalpha( key ) ) {
key = toupper( key );
}
keys[ key ] = true;
}
void KeyboardUp( int key, int x, int y ) {
if ( isalpha( key ) ) {
key = toupper( key );
}
keys[ key ] = false;
}
无论是开启还是关闭大写锁定,toupper都会确保按q或Q是相同的。如果您不需要,则不必使用它。
然后在更新代码的某处,您可以检查按键是否按下了
if ( keys['Q'] ) {
// do things
}