我试图让一个男人跳到y轴上,所以我使用了2秒的循环,第一秒它应该向下移动并弯曲膝盖,第二秒它应该向上移动然后完成起始位置。现在我刚刚开始让这个男人在第一秒内跪下来弯曲它,我没有编写动画的其余部分。问题是glutPostRedisplay没有根据需要刷新循环内的屏幕,所以看起来像动画,它只是在循环完成后重新显示屏幕。我如何让glutPostRedisplay刷新我的循环中的屏幕,使它看起来像一个动画?
case ' ':
miliseconds = 0;
MoveManY = 0;
start = clock();
i=0;
while (miliseconds<2000)
{
finish = clock();
miliseconds = (finish - start);
Sleep(1);
if (miliseconds<1000)
{
MoveManY=MoveManY-0.02;
}
glutPostRedisplay();
}
break;
答案 0 :(得分:4)
glutPostRedisplay
不会直接触发重绘屏幕。它仅向系统指示屏幕需要尽快重绘。像你一样在循环中多次调用它实际上与调用它一样具有相同的效果。有关详细信息,请参阅here。
我无法分辨你发布的代码在哪里。但是,您要做的是使用glutIdleFunc
指定一个方法,当没有其他任何事情可以执行时,并在其中执行动画的单帧所需的操作并调用{ {1}}一次。这将需要将您的计时器移动到其他地方。
我发现this tutorial对GLUT动画非常有帮助。