2009-10-21 7 views
3

Vous avez essayé de le trouver en ligne maintenant.Comment effacer une SDL_Surface pour en remplacer une autre?

J'ai une SDL_Surface avec du contenu (dans l'un c'est du texte, dans un autre c'est une partie d'un sprite). Dans la boucle de jeu, j'obtiens les données sur l'écran. Mais alors il boucle encore et il ne remplace pas les vieilles données mais écrit juste au-dessus de lui. Donc, dans le cas du texte, cela devient un gâchis.

J'ai essayé SDL_FreeSurface et cela n'a pas fonctionné, n'importe qui sait une autre manière?

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

Êtes-vous après la fonction SDL_FillRect()? Si ce n'est pas le cas, veuillez ajouter quelques détails à votre question ou montrer du code. – Artelius

+0

Je dois donc remplir Surface avec FillRect et y écrire à nouveau? –

+0

@ Ólafur Waage: Oui, c'est à peu près l'idée. –

Répondre

7

Essayez quelque chose comme: SDL_FillRect(screen, NULL, 0x000000);
au début de la boucle.

+0

Cela a fonctionné après un peu de bricolage avec les couches de surface. Merci. –

1

Ce que je fais est généralement de dessiner sur une surface secondaire (soit une surface en mémoire qui est pas à l'écran), puis SDL_BlitSurface quand il est prêt à être copié à l'écran. Vous pouvez ensuite effacer tout le tampon secondaire (avec SDL_FillRect) dans l'itération suivante et redessiner tout ou seulement une partie de si vous ne voulez pas perdre toute la surface et seulement changé un rectangle. De cette façon, vous obtenez également le double tampon et évitez le scintillement. N'oubliez pas non plus SDL_UpdateRects après avoir malaxé.

2

Si vous dessinez quelque chose avec de la transparence (par exemple des choses de SDL_ttf) alors les zones transparentes entre le texte ne seront pas modifiées, ce qui signifie que les écritures précédentes resteront. Ce n'est généralement pas un problème car le comportement habituel est que le programme efface le tampon de trame et redessine toute la scène une fois par image. Dans l'ancien temps, il était courant de redessiner seulement les parties «sales» de l'écran, mais ce n'est pas si commun maintenant.

+0

choses intéressantes. Merci. –

Questions connexes