Domanda

Sto provando a trovarlo online da un po 'di tempo.

Ho una SDL_Surface con alcuni contenuti (in uno è il testo, in un altro è una parte di uno sprite). All'interno del loop di gioco ottengo i dati sullo schermo bene. Ma poi si riavvia di nuovo e non sostituisce i vecchi dati ma ci scrive solo su di essi. Quindi, nel caso del testo, diventa un casino.

Ho provato SDL_FreeSurface e non ha funzionato, qualcuno conosce un altro modo?

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);
È stato utile?

Soluzione

Prova qualcosa del tipo: SDL_FillRect (schermo, NULL, 0x000000);
all'inizio del ciclo.

Altri suggerimenti

Se stai disegnando qualcosa con trasparenza (es. cose da SDL_ttf), le aree trasparenti tra il testo non saranno modificate, il che significa che le scritture precedenti rimarranno. Questo di solito non è un problema perché il normale comportamento è che il programma cancelli il frame buffer e ridisegni l'intera scena una volta per frame. Ai vecchi tempi era comune ridisegnare solo le parti "sporche" dello schermo, ma ora non è così comune.

Quello che faccio di solito è disegnare su una superficie secondaria (ovvero una superficie in memoria che non è lo schermo) e quindi SDL_BlitSurface quando è pronto per essere copiato sullo schermo. È quindi possibile cancellare l'intero buffer secondario (con SDL_FillRect ) nella successiva iterazione e ridisegnare tutto o solo una parte di se non si desidera perdere l'intera superficie e modificare solo un rettangolo.

In questo modo, ottieni anche il doppio buffering ed evita lo sfarfallio. Inoltre, non dimenticare SDL_UpdateRects dopo averlo inserito.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top