• Domingo 22 de Diciembre de 2024, 22:48

Autor Tema:  Problema con SDL_ttf  (Leído 3419 veces)

Daggoth

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Problema con SDL_ttf
« en: Sábado 20 de Febrero de 2010, 20:58 »
0
Hola, estoy aprendiendo a usar la libreria SDL para programar algun juego y me he topado con un problema con la libreria ttf. Supuestamente este codigo deberia mostrar un texto en la ventana creada pero no lo hace, no muestra nada. El codigo compila bien y se ejecuta tambien pero solo me muestra la ventana creada con su fondo negro y sin nada mas.

No para de mirar el codigo y no veo el fallo por ningun lado.

Os dejo el codigo:

Citar
#include <iostream>
#include <SDL.h>
#include <SDL_ttf.h>

using namespace std;

int main(int argc, char *argv[]){

   SDL_Color bgcolor, fgcolor;
   SDL_Rect rectangulo;
   SDL_Surface *screen, *ttext;
   TTF_Font *fuente;
   const char texto[14] = "Hola Mundo...";
   char msg[14];
   SDL_Event event;
   int done = 0;

   if(SDL_Init(SDL_INIT_VIDEO) < 0){
      cout << "No se pudo iniciar SDL: n" << SDL_GetError();
      exit(1);
   }

   screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE|SDL_DOUBLEBUF);
   if(screen == NULL){
      cout << "No se puede iniciar el modo grafico: n" << SDL_GetError();
      exit(1);
   }

   atexit(SDL_Quit);

   if(TTF_Init() < 0){
      cout << "No se pudo iniciar SDL_ttf: n" << SDL_GetError();
      return 1;
   }

   atexit(TTF_Quit);

   fuente = TTF_OpenFont("ariblk.ttf",20);

   fgcolor.r=200;
   fgcolor.g=200;
   fgcolor.b=10;
   bgcolor.r=255;
   bgcolor.g=0;
   bgcolor.b=0;

   sprintf(msg,"%s",texto);
   ttext = TTF_RenderText_Shaded(fuente,msg,fgcolor,bgcolor);
   rectangulo.y=100;
   rectangulo.x=100;
   rectangulo.w=ttext->w;
   rectangulo.h=ttext->h;

   SDL_SetColorKey(ttext,SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(ttext->format,255,0,0));

   SDL_BlitSurface(ttext,NULL,screen,&rectangulo);

   TTF_CloseFont(fuente);

   SDL_FreeSurface(ttext);

   while(done == 0){
      while(SDL_PollEvent(&event)){
         if(event.type == SDL_KEYDOWN)
            done = 1;
      }
   }

   return 0;
}

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Problema con SDL_ttf
« Respuesta #1 en: Domingo 21 de Febrero de 2010, 00:52 »
0
¿Lo depuraste? ¿Que devuelve la funcion TTF_OpenFont?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Daggoth

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Problema con SDL_ttf
« Respuesta #2 en: Domingo 21 de Febrero de 2010, 10:13 »
0
Si, si lo depure de arriba a abajo y la funcion TTF_OpenFont me devuelve la direccion de memoria del puntero del tipo TTF_Font......

Teoricamente no tiene errores, es asi como deberia ser, pero sin embargo no muestra el texto :huh:

manurincon

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Problema con SDL_ttf
« Respuesta #3 en: Jueves 21 de Febrero de 2013, 23:55 »
0
Este código es el mismo que aparece en el libro de programación de videojuegos de Alberto García Serrano, y sólo he conseguido que funcione añadiendo "SDL_Flip(screen);" después del SDL_BlitSurface. He pensado que puede ser por usar el doble búfer, que la imagen se mande al otro búfer y por eso es necesario cambiar con Flip.