我有一个绘制圆形的显示功能,我有一个更新功能,使用它可以沿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()绘制圆圈
答案 0 :(得分:1)
它可能会失败,因为你的更新函数没有告诉过剩在40毫秒(glutTimerFunc)再次调用更新函数,所以一旦更新函数不再执行任何操作,它就会在else中。
无论如何,我做了一些小修改,这应该使这项工作改变/创建以下更新功能:
void update(int a)
{
if(y1center>=100)
{
y1center-=5;
}
else
{
y1center=950;
}
glutTimerFunc(40,update,0);
glutPostRedisplay();
}
答案 1 :(得分:0)
在更新功能中,如果你落入else(y1center< 100),你将不会再次注册计时器(glutTimerFunc(40,update,0)调用)。