Duda en SDL_TTF

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

Duda en SDL_TTF

Notapor Juan Carlos » Lun Ago 20, 2007 11:04 pm

Hola, tengo la siguiente duda. escribo una misma frase en SDL con SDL_TTF de tres maneras distintas pero una de ellas (TTF_RenderText_Solid()) no funciona y no se porque.
Aqui les paso el codigo completo en el que se presenta el error. Disculpen la desprolijidad del codigo que les muestro, lo fabrique rapidamente para mostrar el hecho puntual de mi duda.

Código: Seleccionar todo
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

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

      SDL_Surface *pantalla;
   if(SDL_Init(SDL_INIT_VIDEO)!=0)
      {
       printf("No se puede INICIAR SDL: %s\n", SDL_GetError());
      }
   if(TTF_Init()!=0)
      {
      printf("No se puede INICIAR TTF: %s\n", SDL_GetError());
      }


pantalla=SDL_SetVideoMode(800,600,24,SDL_HWSURFACE|SDL_DOUBLEBUF);

TTF_Font *Arial12=TTF_OpenFont("font.ttf", 24);
SDL_Event event;
int done=0;

SDL_Color Color2={200,47,215,0};
SDL_Color Color3={0,0,255,0};

SDL_Rect rect={600, 500, 0, 0};

SDL_BlitSurface(TTF_RenderText_Solid(Arial12,"hola mmm",Color2), NULL, pantalla, &rect);

rect.x=300;
SDL_BlitSurface(TTF_RenderText_Shaded(Arial12,"hola mmm",Color2, Color3), NULL, pantalla, &rect);

rect.x=500;
SDL_BlitSurface(TTF_RenderText_Blended(Arial12,"hola mmm",Color2), NULL, pantalla, &rect);

SDL_Flip(pantalla);

TTF_CloseFont(Arial12);

TTF_Quit();

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


Saludos
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor Geo » Lun Ago 20, 2007 11:35 pm

¿A qué te refieres con que no funciona? ¿Qué hace/no hace?

Yo lo probé y no tuve problemas.
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 Juan Carlos » Mar Ago 21, 2007 12:29 am

Pues en teoria deberia escribirse tres veces "hola mmm" pero solo lo hace 2 veces, fallando en la primera funcion. La verdad es que no lo entiendo.

Por si las dudas, la version de SDL es 1.2.11 y la de SDL_TTF es 2.0.8 y ejecuto el programa en linux ubuntu

Saludos
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor Geo » Mié Ago 22, 2007 12:32 pm

Imagen
By geomx at 2007-08-22

Lo probé en Windows, con las mismas versiones de SDL y de SDL_ttf. El único cambio que hice fué este (pero no tiene que ver con el problema, sólo para ubicar en otra posición la salida de texto):
Código: Seleccionar todo
SDL_Rect rect={100, 500, 0, 0};


Si puedo más tarde lo pruebo en Ubuntu ;).
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 Juan Carlos » Mié Ago 22, 2007 1:02 pm

Yo ahora estoy en Ubuntu, y el amule esta demasiado motivado descargando y no lo quiero apagar. Dentro de unas hora lo voy a probar en Windows.
Si la memoria no me falla, yo ya habia escrito algo con "Solid" y no habia tenido problemas pero lo hice en Windows. Sera el linux, el conflictivo?

Como dato, tengo Ubuntu 7.04 - Feisty Fawn -
Y tengo Gnome 2.18.1

Saludos

EDITO: Compile el programa en windows y la funcion "solid" funciona a la perfeccion. Supongo que sera un fallo entre SDL y Linux
Juan Carlos
 
Mensajes: 97
Registrado: Sab Jul 07, 2007 1:05 pm

Notapor KANJI » Dom Nov 18, 2007 7:13 pm

TENGO EL MISMO PROBLEMA, PERO A MI NO ME SALE EL TEXTO EN NINGUNO DE LOS TRES PROCEDIMIENTOS, (TRABAJO EN WINDOWS)
FA PS KD
Avatar de Usuario
KANJI
 
Mensajes: 5
Registrado: Dom Nov 18, 2007 7:05 pm
Ubicación: Cúcuta, Colombia

Notapor hugoruscitti » Lun Nov 19, 2007 2:41 pm

KANJI escribió:TENGO EL MISMO PROBLEMA, PERO A MI NO ME SALE EL TEXTO EN NINGUNO DE LOS TRES PROCEDIMIENTOS, (TRABAJO EN WINDOWS)


Para que el ejemplo que envió Juan Carlos funcione, hace falta
tener un archivo adicional llamado "font.ttf", es probable que
al momento de probar el programa no hallas tenido ese archivo,
¿puede ser?.

Te dejo un vínculo a un archivo de las mismas características:

http://www.losersjuegos.com.ar/incoming ... 9/font.ttf

de todas formas, si el problema que tienes es ese, el programa
debería imprimir un mensaje por un terminal de texto. Procura
tener un terminal de texto en donde se vean los mensajes creados
con "printf", eso siempre es útil.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Notapor hugoruscitti » Lun Nov 19, 2007 2:49 pm

Juan Carlos escribió:Si la memoria no me falla, yo ya habia escrito algo con "Solid" y no habia tenido problemas pero lo hice en Windows. Sera el linux, el conflictivo?


Saludos, probé el programa en Ubuntu 7.10 y funcionó
correctamente. No tuve tiempo de probarlo en otra distribución,
pero entiendo que debería funcionar correctamente.

Imagen

Te dejo una versión un poco modificada, hace lo mismo en realidad:

Código: Seleccionar todo
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>

int main(int argc, char* argv[])
{
    int done = 0;
    SDL_Surface * pantalla;
    SDL_Surface * tmp;
    TTF_Font * font;
    SDL_Event event;
    SDL_Color Color2 = {200, 47, 215, 0};
    SDL_Color Color3 = {0, 0, 255, 0};
    SDL_Rect rect = {0, 100, 0, 0};


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

    if (TTF_Init())
    {
        printf("No se puede iniciar TTF: %s\n", SDL_GetError());
        return 1;
    }

    pantalla = SDL_SetVideoMode(320, 240, 16, 0);
    font = TTF_OpenFont("font.ttf", 24);

    rect.w = 20;
    tmp = TTF_RenderText_Solid(font, "hola 1", Color2);
    SDL_BlitSurface(tmp, NULL, pantalla, &rect);

    rect.x = 120;
    tmp = TTF_RenderText_Shaded(font, "hola 2", Color2, Color3);
    SDL_BlitSurface(tmp, NULL, pantalla, &rect);

    rect.x = 230;
    tmp = TTF_RenderText_Blended(font, "hola 3", Color2);
    SDL_BlitSurface(tmp, NULL, pantalla, &rect);

    SDL_Flip(pantalla);

    TTF_CloseFont(font);
    TTF_Quit();

    while (! done)
    {
        SDL_WaitEvent(& event);

        if (event.type == SDL_KEYDOWN || event.type == SDL_QUIT)
            done = 1;
    }

    return 0;
}



y su Makefile (si el archivo anterior se llama "texto.c"):

Código: Seleccionar todo
CFLAGS= `sdl-config --cflags` -Wall
LDFLAGS=`sdl-config --libs` -lSDL_ttf

texto: texto.o


Saludos.
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

SDL_ttf

Notapor KANJI » Vie May 16, 2008 9:18 pm

Ke bien, ahora sii

Gracias xD
FA PS KD
Avatar de Usuario
KANJI
 
Mensajes: 5
Registrado: Dom Nov 18, 2007 7:05 pm
Ubicación: Cúcuta, Colombia


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

cron