<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Hola a todos.<br>
<br>
mi duda es la siguiente:<br>
<br>
El codigo que expongo a continuación me funciona, pero a lo mejor me
estoy complicando la vida...<br>
¿a alguien se le ocurre una solución mas sencilla?<br>
<br>
El motivo es :<br>
Estoy usando unas bibliotecas gráficas para videojuegos (SDL, y
SDL_ttf) la primera me permite crear un entorno gráfico, eventos de
teclado, ratón, .. etc., y la segunda le añade el uso de fuentes de
texto, pero con una gran limitación, no reconoce los caracteres de
escape por ej.: "\n", imprimiendo todo el texto seguido.<br>
<br>
la unica forma que se me ocurre de emular el uso de \n es coger cada
parte del texto hasta dicho carácter, he imprimirlo como linea
independiente, y para ello utilizo strtok().<br>
Si bien no me equivoco, esta función modifica la cadena de origen,
por lo que tengo que trabajar en una copia, que creo de forma
dinámica.<br>
<br>
NOTA: he puesto en <font color="#ff0000">ROJO</font> lo referente
al método que empleo, el resto pertenece al uso de las bibliotecas
antes mencionadas.<br>
<br>
[code]<br>
class fuentes<br>
{<br>
<br>
TTF_Font *fuente; // almacena la fuente<br>
SDL_Color color; // almacena el color en tres campos r,g,b.<br>
SDL_Rect pos; // objeto de coordenadas de intercambio<br>
<br>
public:<br>
<br>
/** imprime texto.<br>
texto = texto a imprimir<br>
r, g, b = componentes RGB del color del texto<br>
x, y = coordenadas horizontal y vertical desde la esquina
superior izquierda de la pantalla<br>
superficie = imagen destino, donde se imprimirá el texto<br>
**/<br>
void imprime(const char *texto, int r, int g, int b, int x, int
y, SDL_Surface *superficie)<br>
{<br>
SDL_Surface *img; // aquí genera una linea de texto en
forma de imagen<br>
<br>
<font color="#ff0000">//como no se que tamaño tendrá creo
un array de forma dinamica<br>
char *copytxt;<br>
<br>
copytxt = new char[1+strlen(texto)]; // nº caracteres +
nulo<br>
strcpy(copytxt, texto); // y copio el texto a manejar</font><br>
<br>
char *linea; <br>
<br>
color.r=r;<br>
color.g=g;<br>
color.b=b;<br>
<br>
<font color="#ff0000"> linea = strtok(copytxt, "\n"); </font><br>
if(linea)<br>
{<br>
img = TTF_RenderText_Blended(fuente, linea, color); <br>
pos.x=x;<br>
pos.y=y;<br>
SDL_BlitSurface(img,NULL, superficie, &pos);<br>
}<br>
<br>
// Las siguientes llamadas con NULL<br>
while(linea)<br>
{<br>
<font color="#ff0000"> linea = strtok(NULL, "\n");</font><br>
if(linea)<br>
{<br>
img = TTF_RenderText_Blended(fuente, linea, color);<br>
//SDL_SetAlpha(img,1,alpha);<br>
pos.x=x;<br>
pos.y += TTF_FontLineSkip(fuente);<br>
SDL_BlitSurface(img,NULL, superficie, &pos);<br>
<br>
}<br>
}<br>
SDL_FreeSurface(img); // libera la memoria de la imagen<br>
<font color="#ff0000"> delete[] copytxt; // libera la memoria
del texto</font><br>
}<br>
<br>
... // otras funciones<br>
<br>
};<br>
[/code]<br>
</body>
</html>