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

Detect only one keypress in 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();
}

您还需要使用 glutKeyboardUpFunc

在 onKeyUp 事件中清除 keysPressed[key]
void onKeyUp(unsigned char key,int x, int y) 
{
    keysPressed[key] == false;       
}

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

使用studio.in中定义的输入刷新 它避免输入的其余部分