графика — обнаружение только одного нажатия клавиш в переполнении стека

Я пытаюсь использовать среду перенасыщения для обработки нажатий клавиш в игре, которую я пишу на 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();
}

0

Решение

Вы просто проверите, если keyPressed [key] уже имеет значение true, и добавите свою кривую, только если она имеет значение false.

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();
}

Вам также необходимо очистить keysPressed [key] в событии onKeyUp, используя glutKeyboardUpFunc

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

Другие решения

glutIgnoreKeyRepeat (1), вероятно, то, что вы хотите. (1 = вкл)

0

Используйте входной поток определите в studio.in
Это избежать отдыха ввода

0