Ayuda con posible bug de SDL_ttf

Ayuda con posible bug de SDL_ttf

Notapor Faqndo » Mar Jul 24, 2012 6:41 am

Buenas, estoy teniendo un problema del que me di cuenta de que estaba casi 1 mes despues de que apareciera, el problema es tal que asi:


Tengo en proyecto un juego hack and slash isometrico, donde vas matando bichitos por el mapa, el juego estaba bastante avanzado y estaba a punto de terminar de diseñar graficamente el juego y empezar la fase de puesta de sonido, pero me aparecio el problema de que, cuando pasa un tiempo despues de que empieze la partida, los indicadores de atauqe, defensa, velocidad y todo lo que muestre numeros, desaparece y no vuelve a aparecer, lo cual me esta trayendo de cabeza porque no tengo ni idea de porque lo hace, ya que, los blit_surfaces de dibujo de las letras estan con el mismo if que las demas cosas que si que se muestran, como monstruos o el mapa.



Alguien tiene idea asi a primera vista de lo que le podria pasar?,

PD:pondria el codigo entero, pero son 3600 lineas de codigo el main y claro, mas de uno se perderia porque hay implementadas muchas cosas.



PD2: ahora me he dado cuenta de que el post esta en mal lugar, si algun admin puede moverlo se lo agradeceria mucho
Faqndo
 
Mensajes: 10
Registrado: Dom May 13, 2012 4:36 pm

Re: Ayuda con posible bug de SDL_ttf

Notapor Barajas » Mar Jul 24, 2012 10:05 pm

Bueno, primero que nada, creo que lo mas apropiado es intentar averiguar que sucede en el momento en el cual dejan de parecer el puntage, podría ser que la función comienza a recibir argumentos nulos, podría ser que la condición no se cumple adecuadamente, o un verdadero bug en la librería...

Te sugiero mandar a la terminal lo que en teoría debería de recibir la función, eso podría servir para empezar...
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Ayuda con posible bug de SDL_ttf

Notapor carlostex » Mié Jul 25, 2012 12:03 am

Desaparecen en el mismo momento siempre? desaparecen cuando algún objeto se pinta en un determinado lugar?
Son mis dudas, a simple vista no te puedo decir nada mas, lo que si, es que dudo muchísimo que sea un bug de la biblioteca.
tambien checa cuanta memoria esta consumiendo el juego.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con posible bug de SDL_ttf

Notapor Faqndo » Mié Jul 25, 2012 7:15 am

Bueno, he estado haciendo unas pruebas, quitando funciones y complementos del juego, y el error persiste, pero varia el tiempo del fallo segun le quito cosas, cuantas mas cosas le quite (poderes, ataques especiales, etc...) mas tarda en fallar.


Yo lo achacaria a un problema de paso nulo de datos, pero, puede un dato nulo de una variable, afectar a todas las demas variables?


una parte de lo que desaparece lo meto asi:

Código: Seleccionar todo
posicion_letras.y =  10;
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, x, solid);
        SDL_BlitSurface(text_surface, NULL, screen, &posicion_letras);
        posicion_letras.y =  30;
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, y, solid);
        SDL_BlitSurface(text_surface, NULL, screen, &posicion_letras);
        sprintf(x ,"%d",limite_disparos );
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, x, solid);
        dibujaImagen(screen, text_surface, 770,30 );
        sprintf(x ,"%d",velocidad_disparo );
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, x, solid);
        dibujaImagen(screen, text_surface, 770,55 );
        sprintf(x ,"%d",h->ataque );
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, x, solid);
        dibujaImagen(screen, text_surface, 770,80 );
        sprintf(x ,"%d",puntuacion_final_nivel );
        text_surface = drawtext(fuente, 0, 0, 0, 0, 0, 0, 0, 0, x, solid);
        dibujaImagen(screen, text_surface, 770,105 );


y para hacer esto utilizo la funcion:

Código: Seleccionar todo
enum textquality {solid, shaded, blended};

  SDL_Surface *drawtext(TTF_Font *fonttodraw, char fgR, char fgG, char fgB, char fgA,
  char bgR, char bgG, char bgB, char bgA, char text[], textquality quality)
  {
    SDL_Color tmpfontcolor = {fgR,fgG,fgB,fgA};
    SDL_Color tmpfontbgcolor = {bgR, bgG, bgB, bgA};
    SDL_Surface *resulting_text;

    if (quality == solid) resulting_text = TTF_RenderText_Solid(fonttodraw, text, tmpfontcolor);
    else if (quality == shaded) resulting_text = TTF_RenderText_Shaded(fonttodraw, text, tmpfontcolor, tmpfontbgcolor);
    else if (quality == blended) resulting_text = TTF_RenderText_Blended(fonttodraw, text, tmpfontcolor);

    return resulting_text;
  }

Faqndo
 
Mensajes: 10
Registrado: Dom May 13, 2012 4:36 pm

Re: Ayuda con posible bug de SDL_ttf

Notapor Barajas » Mié Jul 25, 2012 6:34 pm

Faqndo escribió:puede un dato nulo de una variable, afectar a todas las demas variables?


:D

Bueno, leyendo el código y achacando algunos problemas sobre la claridad del nombre de algunas variables, parece que no hay nada mal.

Aun que... ¿Solid es una variable constante que nunca se toca?, y si se toca para modificar su valor... ¿ese valor esta dentro de las opciones de la función drawtext ?

Me inclino mas a eso, ya que es el único caso en el cual no regresa una imagen tu función, yo sugeriría remplazar el ultimo else if de la función por un simple else para un "valor por defecto".... y revisar también si en algún momento la cadena de texto es nula.
Vi veri universum vivus vici
Avatar de Usuario
Barajas
 
Mensajes: 209
Registrado: Mar Nov 16, 2010 12:06 am

Re: Ayuda con posible bug de SDL_ttf

Notapor carlostex » Jue Jul 26, 2012 4:45 am

Bueno ya viendo el código, el uso de la funcion fprintf me causa duda, la verdad nunca la he usado, pero viendo http://www.cplusplus.com/reference/clibrary/cstdio/fprintf/ nos da alguna idea, es importante verificar el comportamiento de las funciones que usamos. No se como tengas declarada la variable x que usas como buffer, como dijiste que todo esta en un main muy grande supongo que esa variable no se borra en cada vez que se ejecuta la parte de código que mostraste, y como se puede ver el el link que te puse, la funcion agrega los caracteres al buffer, es decir, si la llamas y haces que escriba "hola" en 'x' y la vuelves a llamar y haces que escriba "hola" en 'x' de nuevo, lo que tendrás en 'x' sera "holahola".
no se si estés tomando eso en cuenta. Prueba poner a ceros la variable 'x' usando la función memset.
El conocimiento de unos es conocimiento de todos.
Avatar de Usuario
carlostex
 
Mensajes: 249
Registrado: Mar Jul 14, 2009 4:13 am
Ubicación: mexico

Re: Ayuda con posible bug de SDL_ttf

Notapor Faqndo » Dom Jul 29, 2012 6:15 am

Bueno, vuelvo a postear para dar noticias sobre el supuesto bug:




He intentado eso de poner else para que imprima siempre una instruccion en pantalla, pero no va igualmente, intente eso de que imprima en un archivo externo las variables para ver si alguna fallaba y saliese el fallo, pero loas variables despues del bug siguen valiendo lo mismo, asi que tampoco es eso.

Aparte, me he dado cuenta de que el fallo lo tengo desde el principio del proyecto, porque he testeado versiones anteriores del juego y tambien falla.



Ah si, aparte de las variables que pase, tambien el ttf dibujaba los nombres de los bichos enemigos encima de ellos, y, segun el color de la fuente, indicaba su estado de salud, prove quitar ese complemento al juego para ver si fallaba por eso y paso, de fallar a los (aproximadamente) 230 sec a los 3200 sec, parece que cuanto menos se utilice la libreria, mas tarda en salir el bug



PD: pero yo no uso fprintf sino sprintf, que me elimina lo anterior por lo nuevo, por lo que veo en los archivos de texto que me imprime el juego
Faqndo
 
Mensajes: 10
Registrado: Dom May 13, 2012 4:36 pm


Volver a Videojuegos

¿Quién está conectado?

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