Problema con SDL_ttf en debian

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Problema con SDL_ttf en debian

Notapor CristianGC » Lun Mar 19, 2007 7:12 pm

Hola, que tal me llamo Cristian este es mi primer mensaje. les cuento lo que me paso, venia usando dev-c++ sobre windows y este programa que cuestra texto por pantalla funciona bien, cuando lo pase a linux pude compilarlo bien, pero al ejecutar me abre la ventana de sdl y no muestra el texto. supongo que el problema estara con la libreria sdl_ttf.
aca les pongo el makefile que use sobre linux

#Makefile#
CCP=g++
CC=gcc
INCLUDE=-I"/usr/include/SDL" -I"/usr/include" -D_REENTRANT
LIB=-L/usr/lib -lSDLmain -lSDL -lSDL_ttf -lpthread
FLAGS=-Wall -O2 -ggdb3

ejecutable: main.o
$(CCP) $(FLAGS) -o ejecutable main.o $(LIB)
main.o: main.cpp
$(CCP) $(FLAGS) -c main.cpp -o main.o
clean:
$(RM) ejecutable main.o


//y el programa
//main.cpp
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <string.h>

SDL_Rect rectangulo;
SDL_Surface *screen,*ttext;

char msg[6];

struct colores {
int r;
int g;
int b;
} RGB[5];

void dibu(int size, int color, char *texto, int y, int x)
{
TTF_Font *fuente;
SDL_Color fgcolor;

fuente = TTF_OpenFont("aa.ttf",size);
fgcolor.r=RGB[color].r;
fgcolor.g=RGB[color].g;
fgcolor.b=RGB[color].b;

sprintf(msg,"%s",texto);
ttext = TTF_RenderText_Blended(fuente,msg,fgcolor);

rectangulo.y=y;
rectangulo.x=x;
rectangulo.w=ttext->w;
rectangulo.h=ttext->h;
SDL_BlitSurface(ttext,NULL,screen,&rectangulo);
TTF_CloseFont(fuente);
}

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

RGB[0].r=255;
RGB[0].g=0;
RGB[0].b=0;

RGB[1].r=0;
RGB[1].g=255;
RGB[1].b=0;

RGB[2].r=0;
RGB[2].g=0;
RGB[2].b=255;

RGB[3].r=255;
RGB[3].g=255;
RGB[3].b=0;

RGB[4].r=255;
RGB[4].g=128;
RGB[4].b=0;

SDL_Event event;
int done = 0;

if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
return 1;
}

screen = SDL_SetVideoMode(330,600,24,SDL_HWSURFACE|SDL_DOUBLEBUF);
if (screen == NULL) {
printf("No se puede inicializar el modo gráfico: %s\n",SDL_GetError());
return 1;
}

atexit(SDL_Quit);

if (TTF_Init() < 0) {
printf("No se pudo iniciar SDL_ttf: %s\n",SDL_GetError());
return 1;
}

atexit(TTF_Quit);


while(!done){

dibu(60, 0, "C", 70, 80);
dibu(60, 1, "u", 70, 120);
dibu(60, 2, "b", 70, 153);
dibu(60, 3, "i", 70, 188);
dibu(60, 4, "s", 70, 201);
dibu(15, 2, "Cristian Coronel", 150, 95);
dibu(16, 4, "Presione cualquier tecla para comenzar", 500, 10);

SDL_BlitSurface(ttext,NULL,screen,&rectangulo);
SDL_FreeSurface(ttext);
while(done == 0) {
while ( SDL_PollEvent(&event) ) {
if ( event.type == SDL_KEYDOWN )
done = 1;
}
}
}
return 0;
}

Si alguien me puede dar una mano.
Saludos y gracias.[/code]
CristianGC
 
Mensajes: 2
Registrado: Lun Mar 19, 2007 6:55 pm

Notapor Geo » Lun Mar 19, 2007 8:37 pm

Todo está correcto, es sólo que te falta una cosa: actualizar la pantalla :D.

Agrega esta instrucción justo después de que terminas de escribir el texto, o en el ciclo en el que esperas a que se presione una tecla (en este caso el código se ejecutará repetidamente, innecesario en tu caso pero allí iría si hubiera cambios en pantalla):

Código: Seleccionar todo
SDL_Flip( screen );


Saludos,
JJ (Geo).
La imaginación es el límite.
Visita mi blog en inglés o en español.
Geo
 
Mensajes: 244
Registrado: Jue Ago 10, 2006 3:51 am
Ubicación: México

Notapor CristianGC » Mar Mar 20, 2007 12:13 am

Muchas gracias Geo, agregue la instruccion y todo funciona bien.
me estaba volviendo loco.
Saludos y gracias.
CristianGC
 
Mensajes: 2
Registrado: Lun Mar 19, 2007 6:55 pm


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron