2015-10-02 5 views
0

Я пытаюсь использовать оболочку glut для обработки нажатий клавиш для игры, которую я пишу на C++. Когда нажата конкретная клавиша, я хочу начать рисовать новую кривую, и поэтому создаю новую кривую и добавлю ее в свой контейнер кривых. Однако, когда я использую onKeyboard и debug, я вижу, что эта функция вызывается снова и снова при нажатии клавиши, а не только при первом нажатии. Поэтому при каждом нажатии клавиши создается около 12 кривых. Мой код для onKeyboard ниже. Любая помощь будет оценена очень!Обнаружение только одного нажатия клавиши в C++

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] уже истинно, и только добавьте свою кривую, если она ложна.

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 [ключ] в случае OnKeyUp, используя glutKeyboardUpFunc

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

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

0

Использовать входной флеш в студиях. Избегать остальной информации

Смежные вопросы