<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>