2013-08-05 2 views
0

Я пытаюсь приостановить программу GLUT во время ее выполнения, нажав клавишу на клавиатуре. Кажется, я не признаю свою запись. Вот соответствующие разделы моего кода:Приостановка программы C++ 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». Если у вас есть лучшие методы, дайте мне знать!

ответ

3

его не работает, потому что по какой-то причине прокомментирован glutKeyboardFunc(handleKeypress). раком, и он должен работать.

+0

lol комментарий Я только что написал на ответ ниже, это, наверное, довольно забавно сейчас :) – CodeKingPlusPlus

2

Ваша программа работает в два этапа:

  • инициализации
  • Основной цикл

Все, прежде чем glutMainLoop является инициализация, говоря GLUT все различные настройки и функции обратного вызова, которые вы хотите использовать. Во время основного цикла GLUT будет вызывать все ваши обратные вызовы, и вы можете рисовать.

Проблема в том, что вы устанавливаете paused во время основного цикла и проверяете его во время инициализации. Поскольку инициализация всегда происходит до основного цикла, установка paused фактически ничего не сделает.

Решение заключается в том, чтобы не полагаться на проверку paused во время инициализации, но вместо этого изменить свои обратные вызовы, чтобы немедленно вернуть, если paused - true.

+0

я поставил следующее в верхней части мой метод drawScene(): 'if (paused) return;' но он все равно не работает. Я также поставил оператор печати в случае «p» моего метода handleKeypress(). И он никогда не печатает мое заявление. – CodeKingPlusPlus

0
# 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) над ним

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