2009-10-21 7 views
3

Пробовал найти это онлайн некоторое время.Как я могу удалить SDL_Surface для замены другим?

У меня есть SDL_Surface с некоторым контентом (в одном его текст, в другом - часть спрайта). Внутри игрового цикла я получаю данные на экране в порядке. Но затем он снова зацикливается и не заменяет старые данные, а просто пишет над ним. Поэтому в случае с текстом это становится беспорядком.

Я пробовал SDL_FreeSurface, и это не сработало, кто-нибудь знает другой способ?

fpsStream.str(""); 
fpsStream << fps.get_ticks(); 
fpsString = fpsStream.str(); 

game.fpsSurface = TTF_RenderText_Solid(game.fpsFont, fpsString.c_str(), textColor); 
game.BlitSurface(0, 0, game.fpsSurface, game.screen); 
+0

Вы после функции SDL_FillRect()? Если нет, добавьте некоторые детали к своему вопросу или покажите код. – Artelius

+0

Итак, мне нужно заполнить поверхность FillRect, а затем написать еще раз? –

+0

@ Ólafur Waage: Да, это в значительной степени идея. –

ответ

7

Try что-то вроде: SDL_FillRect(screen, NULL, 0x000000);
в начале вашего цикла.

+0

Это заставило его работать после немного возиться с поверхностными слоями. Благодарю. –

1

То, что я, как правило, привлекает к вторичной поверхности (то есть, поверхность в памяти, это не экран), а затем SDL_BlitSurface, когда он готов к копированию на экран. Затем вы можете очистить весь вторичный буфер (с SDL_FillRect) в следующей итерации и перерисовать все или только часть, если вы не хотите потерять всю поверхность и только изменили прямоугольник.

Таким образом, вы также получаете двойное буферизацию и избегаете мерцания. Также не забудьте SDL_UpdateRects после бьющих.

2

Если вы рисуете что-то с прозрачностью (например, материал из SDL_ttf), тогда прозрачные области между текстом не будут изменены, что означает, что предыдущие записи останутся. Обычно это не проблема, потому что обычное поведение заключается в том, что программа очищает буфер кадра и перерисовывает всю сцену один раз за кадр. В старые времена было обычным перерисовывать «грязные» части экрана, но это не так часто встречается сейчас.

+0

Интересные вещи. Благодарю. –