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



我正在尝试使用glut框架来处理我用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();
}

您只需检查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();
}

你还需要在onKeyUp事件中清除keyspress [key],使用glutKeyboardUpFunc

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

glutIgnoreKeyRepeat(1)可能就是您想要的。(1 = on)

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

相关内容

  • 没有找到相关文章

最新更新