SDL_Delay не задерживает перед каждым действием

#c #sdl #delay

#c #sdl #задержка

Вопрос:

Я написал программу, которая имеет задержку между каждым нарисованным кругом, но когда я ставлю, например, 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;
}
  

Ответ №1:

Дело в том, что после каждого draw_circle вам действительно нужно обновлять экран. Функции рисования почти во всех графических движках записывают данные в буфер и не обновляют экран, пока вы не скажете им об этом!

Я не знаю, как это работает с SDL, который не использует OpenGL, но с двойным буфером OpenGL Windows вы должны написать SDL_GL_SwapBuffers() , а затем после этого начать очищать экран и т.д., Как будто вы рисуете экран заново!

Если это окно с одним буфером, вам следует очистить буфер, чтобы обновить экран. Я никогда не использовал SDL сам по себе (без OpenGL), поэтому я не знаю названий функций, но с помощью этой подсказки вы узнаете, почему ваш код не работает, и вы сможете найти нужные вам функции в документации SDL.

Комментарии:

1. Для полноты: функции SDL_Flip() с и SDL_UpdateRect() без двойной буферизации.