键盘和键盘特殊功能多按卡住了

时间:2019-07-26 19:37:02

标签: c++ glut freeglut

每当我使用 SHIFT + 任何字符按钮,然后同时释放两个键时,都会使大写字母卡住。例如,我使用键(小写) w 进行“前进”,然后按 SHIFT + w (=大写 W 将使移动速度更快。但是,每当我释放两个键时,这都会使W停留在向量堆栈上。

我设置了4个键盘事件处理函数,这些函数将由以下函数调用:glutKeyboardFuncglutKeyboardUpFuncglutSpecialFuncglutSpecialUpFunc,它们在下面调用这些函数(该代码是我的运动控制系统的核心):

std::vector<unsigned char> keyPresses;

void
KeyboardDownEvent(unsigned char key, int, int)
{
    keyPresses.push_back(key);
}

void
KeyboardUpEvent(unsigned char key, int, int)
{
    for(unsigned int i=0; i<keyPresses.size(); i++){
        if(keyPresses.at(i) == key){
            keyPresses.erase(keyPresses.begin() + i);
        }
    }

    keyPresses.erase(
        std::remove(
            keyPresses.begin(), keyPresses.end(), key
        ),
        keyPresses.end()
    );
}

std::vector<unsigned char> specKeyPresses;

void
KeyboardSpecialDownEvent(int key, int, int)
{
    specKeyPresses.push_back(key);
}

void
KeyboardSpecialUpEvent(int key, int, int)
{
    for(unsigned int i=0; i<specKeyPressesControlP.size(); i++){
        if(specKeyPressesControlP.at(i) == key){
            specKeyPressesControlP.erase(specKeyPressesControlP.begin() + i);
        }
    }

    specKeyPresses.erase(
        std::remove(
            specKeyPresses.begin(), specKeyPresses.end(), key
        ),
        specKeyPresses.end()
    );
}

如您在*UpEvent函数上所见,我添加了2个代码以确保使用1 for循环手动迭代和1 {{1}从向量堆栈中删除按键}。但是该错误仍在发生。上面的代码更新了std::removekeyPresses向量堆栈,下面的移动代码将使用它们:

specKeyPresses

0 个答案:

没有答案