¿Cómo puedo obtener el texto completo en SDL? (No en la consola)
Estoy creando un menú para un juego en C++ y tengo un problema cuando leo un archivo de texto (.cfg), y quiero mostrarlo en la pantalla (con SDL, no en la consola).
El problema es que en SDL, solo obtengo la última línea. ¿Por qué sucede esto?
Aquí está mi código:
fstream characters;
characters.open("characters.cfg", ios::in);
while (getline(characters, line))
cout << line << endl;
Y creo una cadena para mostrarlo con SDL_ttf:
void renderUI() {
SDL_Surface* textSurface;
SDL_Texture* textTexture;
SDL_Rect textRect;
SDL_Color white = { 255,255,255 };
textRect.w = 250;
textRect.h = 20;
textRect.x = 150;
textRect.y = 200;
string names = line;
textSurface = TTF_RenderText_Blended(gameFont, names.c_str(), white);
textTexture = SDL_CreateTextureFromSurface(renderer, textSurface);
if (textSurface == NULL)
{
cout << "TTF_RenderText_Solid() Failed: " << TTF_GetError() << endl;
TTF_Quit();
SDL_Quit();
exit(1);
}
SDL_RenderCopy(renderer, textTexture, NULL, &textRect);
}
Y aquí una foto para mostrar que obtengo el texto completo en la consola, pero no en SDL:
FOTO DE EJEMPLO: Enlace a la foto
davy.ai
El problema es que solo estás almacenando la última línea del archivo de texto en la variable de cadena
names
, por lo que solo se muestra la última línea en la pantalla con SDL. Esto se debe a que estás sobrescribiendo el contenido denames
en cada iteración del bucle while. Lo que necesitas hacer es concatenar cada línea a la variablenames
, de modo que contenga todo el contenido del archivo de texto.Puedes modificar tu código de la siguiente manera:
Esto concatenará cada línea con un carácter de nueva línea y almacenará el texto completo en la variable
names
. Luego, puedes pasarnames
a la función SDL_ttf como antes.Esto debería mostrar el contenido completo del archivo de texto en la pantalla con SDL.