在C ++中只检测一个按键

时间:2015-10-02 14:15:58

标签: c++ graphics keyboard glut curves

我试图使用过剩框架来处理我用c ++编写的游戏的按键。当按下特定键时,我想开始绘制一条新曲线,因此我创建一条新曲线并将其添加到我的曲线容器中。但是,当我使用onKeyboard并进行调试时,我发现当按下某个键时会反复调用此函数,而不仅仅是在初始按下时。因此,每按一次键,它就会产生大约12条曲线。我的onKeyboard代码如下。任何帮助将非常感激!

void onKeyboard(unsigned char key,int x, int y) {
    keysPressed[key] = true;
    switch (key) {
            case 'l':
                curvesContainer.addCurve(new lCurve());
                break;
            case 'p':
                curvesContainer.addCurve(new pCurve());

    }
    glutPostRedisplay();
}

3 个答案:

答案 0 :(得分:0)

您只需检查keyPressed [key]是否已经为真,只有在曲线为假时才添加曲线。

void onKeyboard(unsigned char key,int x, int y) 
{
    if (keysPressed[key] == false)
    {        
        keysPressed[key] = true;

        switch (key) 
        {
            case 'l':
                curvesContainer.addCurve(new lCurve());
                break;
            case 'p':
                curvesContainer.addCurve(new pCurve());
                break;
        }
    }

    glutPostRedisplay();
}

您还需要使用glutKeyboardUpFunc清除onKeyUp事件中的keysPressed [key]

void onKeyUp(unsigned char key,int x, int y) 
{
    keysPressed[key] == false;       
}

答案 1 :(得分:0)

glutIgnoreKeyRepeat(1)可能就是你想要的。 (1 =开)

答案 2 :(得分:0)

在studio.in中使用输入flush定义 它避免了其余的输入