每当我使用 SHIFT + 任何字符按钮,然后同时释放两个键时,都会使大写字母卡住。例如,我使用键(小写) w 进行“前进”,然后按 SHIFT + w (=大写 W
)将使移动速度更快。但是,每当我释放两个键时,这都会使W
停留在向量堆栈上。
我设置了4个键盘事件处理函数,这些函数将由以下函数调用:glutKeyboardFunc
,glutKeyboardUpFunc
,glutSpecialFunc
,glutSpecialUpFunc
,它们在下面调用这些函数(该代码是我的运动控制系统的核心):
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::remove
和keyPresses
向量堆栈,下面的移动代码将使用它们:
specKeyPresses