Comment puis-je effacer un SDL_Surface être remplacé par un autre?
Essayé de trouver cette ligne pendant un certain temps maintenant.
J'ai un SDL_Surface avec certains contenus (c'est du texte, dans un autre est une partie d'un sprite). À l'intérieur de la boucle de jeu-je obtenir les données sur l'écran de l'amende. Mais alors en boucle encore et il ne veut pas remplacer les anciennes données, mais juste écrit sur elle. Ainsi, dans le cas du texte, il devient un gâchis.
J'ai essayé SDL_FreeSurface et ça ne fonctionne pas, quelqu'un connait un autre moyen?
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);
Êtes-vous après le SDL_FillRect() la fonction? Si non, veuillez ajouter quelques détails à votre question ou de montrer un peu de code.
J'ai donc besoin pour remplir la Surface avec FillRect, puis d'écrire à nouveau?
Waage: Ouais, c'est à peu près l'idée.
J'ai donc besoin pour remplir la Surface avec FillRect, puis d'écrire à nouveau?
Waage: Ouais, c'est à peu près l'idée.
OriginalL'auteur | 2009-10-21
Vous devez vous connecter pour publier un commentaire.
Essayez quelque chose comme:
SDL_FillRect(screen, NULL, 0x000000);
au début de la boucle.
OriginalL'auteur oold
Si vous dessinez quelque chose avec de la transparence (par exemple. des trucs de SDL_ttf), puis les zones transparentes entre le texte ne sera pas modifié, la signification précédente écrit restera. Ce n'est généralement pas un problème parce que le comportement habituel est le programme pour effacer le tampon de trame et de redessiner l'ensemble de la scène, une fois par image. Dans les temps anciens, il était courant de redessiner le "sale" des parties de l'écran mais ce n'est pas si commun aujourd'hui.
OriginalL'auteur Kylotan
Ce que je fais habituellement est de tirer pour une surface secondaire (qui est, en mémoire une surface qui n'est pas l'écran), puis
SDL_BlitSurface
lorsqu'elle est prête à être copiée à l'écran. Vous pouvez ensuite effacer l'intégralité du secondaire de la mémoire tampon (avecSDL_FillRect
) dans la prochaine itération et de redessiner tout ou une partie seulement de la si vous ne voulez pas perdre de l'ensemble de la surface et a changé un rectangle.De cette façon, vous obtenez également le doublebuffering et d'éviter le scintillement. Aussi n'oubliez pas
SDL_UpdateRects
après blitting.OriginalL'auteur Tamas Czinege