使用GLUT按住Check Q按钮?

时间:2015-06-09 09:28:03

标签: c++ opengl input glut

我可以用什么功能来检查Q按钮(或任何其他按钮是否被按下)以及为Q按钮指定这个按钮所需的值是什么?

2 个答案:

答案 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
}