Как вызвать функцию обратного вызова дисплея в другой функции, чтобы моя функция таймера также могла выполняться? - PullRequest
1 голос
/ 16 апреля 2011

У меня есть функция отображения, которая рисует круг, и у меня есть функция обновления, с помощью которой я перемещаю круг вдоль оси Y.Как только круг достигнет нижней части окна, я хочу нарисовать новый круг в верхней части и переместить этот круг так же, как предыдущий. Как мне это сделать?

void display(void)
{
 int i;
 flag=0;
 glPointSize(2.0);
 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
 disp2();
 glFlush();
}


void update(int a)
{
  if(y1center>=100)
  {
                      y1center-=5;
                      glutPostRedisplay();
                      glutTimerFunc(40,update,0);
  }
  else
  {
      y1center=950;
      glutDisplayFunc(display);
      //glutPostRedisplay();
      display();
  }
}

Эточто я пытался сделать в функции обновления, но это не сработало.Он просто нарисовал новый круг сверху, но этот круг не двигается .. disp2 () рисует круг

Ответы [ 2 ]

1 голос
/ 16 апреля 2011

Вероятно, сбой, потому что ваша функция обновления не сообщает glut, чтобы она снова вызывала функцию обновления через 40 мс (glutTimerFunc), поэтому, как только она была в другом, функция обновления больше ничего не делает.

В любом случае, я сделал несколько небольших изменений, которые должны изменить эту работу / создать следующую функцию обновления:

void update(int a)
{
  if(y1center>=100)
  {
        y1center-=5;      
  }
  else
  {
        y1center=950;      
  }  

  glutTimerFunc(40,update,0);
  glutPostRedisplay();
}
0 голосов
/ 16 апреля 2011

В функции обновления, если вы попадете в else (y1center <100), вы больше не зарегистрируете таймер (вызов glutTimerFunc (40, update, 0)). </p>

...