Я пытаюсь приостановить свою программу GLUT во время ее выполнения нажатием клавиши на клавиатуре. Кажется, не признать мою запись. Вот соответствующие разделы моего кода:
static bool paused = false;
void handleKeypress(unsigned char key, //The key that was pressed
int x, int y) { //The current mouse coordinates
switch (key) {
case 27: //Escape key
exit(0); //Exit the program
case 'p':
paused = !paused;
break;
}
}
int main(int argc, char** argv) {
//Initialize GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(600, 400); //Set the window size
//Create the window
glutCreateWindow("Fractals in Motion");
initRendering(); //Initialize rendering
//Set handler functions for drawing, keypresses, and window resizes
if(!paused)
{
glutDisplayFunc(drawScene); //drawScene draws everything does the real work
glutTimerFunc(10, update, 0); //Add a timer
}
//glutKeyboardFunc(handleKeypress);
glutReshapeFunc(handleResize);
glutMainLoop(); //Start the main loop. glutMainLoop doesn't return.
return 0; //This line is never reached
}
Я на самом деле получил скелет этого кода из этого очень написанного урока:
http://www.videotutorialsrock.com/opengl_tutorial/basic_shapes/home.php
Тем не менее, я не могу заставить программу остановиться, когда я нажимаю клавишу «p». Если у вас есть лучшие методы, пожалуйста, дайте мне знать!
это не работает, потому что glutKeyboardFunc(handleKeypress)
закомментировано по какой-то причине. раскомментируйте и это должно работать.
Ваша программа работает в два этапа:
Все до glutMainLoop
это инициализация, сообщающая GLUT все различные настройки и обратные вызовы, которые вы хотите использовать. Во время основного цикла GLUT будет вызывать все ваши обратные вызовы, и вы сможете рисовать.
Проблема в том, что вы устанавливаете paused
во время основного цикла и проверки его во время инициализации. Поскольку инициализация всегда происходит до основного цикла, настройка paused
на самом деле ничего не буду делать.
Решение состоит в том, чтобы не полагаться на проверку paused
во время инициализации, но вместо этого измените ваши обратные вызовы, чтобы немедленно вернуться, если paused
является true
,
# include<GL/glut.h>
void keys(unsigned char key, int x, int y)
{
if (key == 'a') paused = 1;
if (key == 'A') paused = 0;
glutPostRedisplay();
}
добавьте эту функцию в вашу программу для функции клавиатуры и везде, где вы используете glutPostRedisplay () в программе
добавлять
если (пауза == 0)
над ним