РЕДАКТИРОВАНИЕ С РЕШЕНИЕМ
Итак, я делаю систему частиц в opengl. Я работаю в Linux. Я хочу сделать его более интерактивным, поэтому, например, когда пользователь нажимает клавишу пробела, запускается новый фейерверк.
Я использую GLUT для захвата ввода с клавиатуры, и когда пользователь нажимает клавишу пробела, он запускает фейерверк, затем зацикливается на некоторое время, и если я снова нажимаю клавишу пробела, он должен ждать, пока Цикл (упомянутый выше) выполняется до того, как он регистрирует нажатие клавиши.
Так что мой вопрос таков:
Есть ли у меня способ, в начале цикла, проверить буфер, в котором перенасыщено нажатие клавиши? Я чувствую, что должен быть какой-то буфер, в котором он хранит нажатия клавиш, потому что, да, как только этот цикл завершится, он регистрирует нажатие клавиш.
РЕШЕНИЕ:
На самом деле я нигде больше не выполняю никаких циклов (кроме циклического перемещения по массивам для обновления местоположений моего фейерверка и т. Д.), Я делаю что-то вроде
в основном, добавьте это:
int main(int argc, char** argv){
//Usual glut initializations
glutTimerFunc(30, update, -1);//says in 30miliseconds call update
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Затем в вашей функции обновления (в параметрах для glutTimerFunc, так что-то вроде этого:
void update(int k){
//UPDATE POSITION OF FIREWORKS
glutTimerFunc(30, update, -1);//it is important to add this
glutPostRedisplay();//calls display() on the next iteration of glut's main loop
}
Затем, наконец, в функции отображения сделайте все, что вам нужно, чтобы нарисовать один кадр (в моем случае, пролистайте каждый фейерверк и нарисуйте его!)
Надеюсь, это поможет:)