#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() без двойной буферизации.