我编写了一个程序,该程序在每个绘制的圆圈之间都有延迟,但是当我放置例如SDL_Delay(2)时,所有内容都是黑色的,大约5秒钟,然后我看到已绘制的所有内容,但是我需要从头开始查看所有内容,这样它就会好像是动画。

这是我的代码:

 while (t<tk){
  l.a = l.a + (l.b - l.a) * t;
  a=l.a;
  Circle cir1(a,o);
  draw_circle(cir1, canvas);
  SDL_Delay(2);
  t=t+0.001;
}

最佳答案

问题是在每个draw_circle之后,您实际上必须更新屏幕。几乎所有图形引擎中的Draw函数都将写入缓冲区,直到您告诉他们,才更新屏幕!

我不知道这如何与不使用OpenGL的SDL一起使用,但是对于双缓冲区OpenGL窗口,您应该编写SDL_GL_SwapBuffers(),然后在它之后,开始清除屏幕,就像重新绘制屏幕一样!

如果是单个缓冲区窗口,则应刷新缓冲区以更新屏幕。我从来没有单独使用过SDL(没有OpenGL),所以我不知道函数名称,但是有了这个提示,您知道了为什么您的代码不起作用,并且您应该能够从SDL文档中找到所需的函数。

关于c++ - SDL_Delay不会在每个操作之前延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8022877/

10-11 05:03