【问题标题】:Detect only one keypress in C++在 C++ 中只检测一个按键
【发布时间】:2015-10-02 14:15:58
【问题描述】:

我正在尝试使用 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();
}

【问题讨论】:

    标签: c++ graphics keyboard glut curves


    【解决方案1】:

    您只需检查 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 事件中使用 glutKeyboardUpFunc 清除 keysPressed[key]

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          • 1970-01-01
          • 1970-01-01
          • 2021-02-02
          • 2015-07-22
          • 2013-08-25
          • 2014-09-03
          相关资源
          最近更新 更多