#c #glut
#c #перенасыщение
Вопрос:
У меня есть функция отображения, которая рисует круг, и у меня есть функция обновления, с помощью которой я перемещаю круг вдоль оси 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 () рисует круг
Ответ №1:
Вероятно, это приводит к сбою, потому что ваша функция обновления не сообщает glut о повторном вызове функции обновления через 40 мс (glutTimerFunc), поэтому, как только это произошло в else, функция обновления больше ничего не делает.
В любом случае, я внес несколько небольших изменений, которые должны изменить эту работу / создать следующую функцию обновления:
void update(int a)
{
if(y1center>=100)
{
y1center-=5;
}
else
{
y1center=950;
}
glutTimerFunc(40,update,0);
glutPostRedisplay();
}
Ответ №2:
В функции обновления, если вы попадаете в else (y1center < 100), вы не будете регистрировать таймер снова (вызов glutTimerFunc(40,update, 0)).