Wie lösche ich ein SDL_Surface werden durch andere ersetzt?
Versucht zu finden, diese online für eine Weile jetzt.
Habe ich ein SDL_Surface mit etwas Inhalt (in einem text, in einem anderen ist ein Teil des sprite). Im Spiel-Schleife, bekomme ich die Daten auf dem Bildschirm in Ordnung. Aber es dann Schleifen wieder und ersetzt es nicht die alten Daten, sondern nur schreibt darüber. Also in dem Fall der text, wird es ein Durcheinander.
Habe ich versucht, SDL_FreeSurface und es hat nicht funktioniert, weiss jemand einen anderen Weg?
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);
Sind Sie nach der SDL_FillRect () - Funktion? Wenn nicht, fügen Sie bitte einige details zu Ihrer Frage oder zeigen von code.
Also muss ich füllen, die Oberfläche mit FillRect und dann schreiben Sie es wieder?
Waage: Ja, das ist so ziemlich die Idee.
Also muss ich füllen, die Oberfläche mit FillRect und dann schreiben Sie es wieder?
Waage: Ja, das ist so ziemlich die Idee.
InformationsquelleAutor | 2009-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie so etwas wie:
SDL_FillRect(screen, NULL, 0x000000);
am Anfang der Schleife.
InformationsquelleAutor oold
Wenn Sie zeichnen, etwas mit Transparenz (zB. Sachen von SDL_ttf), dann die transparenten Bereiche zwischen der text nicht verändert werden, d.h. frühere schreibt, wird bleiben. Dies ist in der Regel nicht ein problem, weil das übliche Verhalten ist für das Programm zum löschen der frame-buffer und Neuzeichnen der gesamten Szene einmal pro frame. In den alten Tagen war es üblich, nur neu zeichnen den 'schmutzigen' Teil des Bildschirms, aber das ist nicht so üblich, jetzt.
InformationsquelleAutor Kylotan
Was ich Tue, in der Regel ist die Zeichnung zu einer sekundären Oberfläche (das heißt, eine in-memory-Oberfläche, ist der Bildschirm nicht) und dann
SDL_BlitSurface
wenn es fertig kopiert werden, auf dem Bildschirm. Sie können dann deaktivieren Sie das ganze sekundären Puffer (mitSDL_FillRect
) in die nächste iteration ein und aktualisieren, alles oder nur ein Teil, wenn Sie nicht wollen, zu verlieren die ganze Oberfläche und veränderten sich nur ein Rechteck.Diese Weise erhalten Sie auch doublebuffering und vermeiden Sie flackern. Vergessen Sie auch nicht
SDL_UpdateRects
nach blitting.InformationsquelleAutor Tamas Czinege