y funciona bien. usa una cadena char msg.
por favor cambien esto si usan otra fuente
//fuente = TTF_OpenFont("ariblk.ttf",15);
Código:
el problema es que yo quiero implementarla a mi juego pero en mi caso uso 1 struct con un campo cadena weno hago lo mismo pero me muestra basura por pantalla queria saber porque y si hay alguna forma de arreglarlo ya debo usar un struct #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <SDL/SDL_ttf.h> int main(int argc, char *argv[]) { SDL_Surface *screen,*ttext; SDL_Event event; bool done = false; SDL_Color colorfuente={255,255,255}; SDL_Rect rect={0,0,0,0}; TTF_Font *fuente; char msg[64]="\0"; atexit(SDL_Quit); atexit(TTF_Quit); // Iniciar SDL if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("No se pudo iniciar SDL: %s\n",SDL_GetError()); exit(1); } // Activamos modo de video screen = SDL_SetVideoMode(800,600,24,SDL_HWSURFACE); if (screen == NULL) { printf("No se puede inicializar el modo gráfico: %s\n",SDL_GetError()); exit(1); } if(TTF_Init() < 0){ printf("No se pudo iniciar SDL_TTF: %s\n",SDL_GetError()); exit(1); } fuente = TTF_OpenFont("ariblk.ttf",15); while(!done) { SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0)); if(msg[0]){ ttext = TTF_RenderText_Solid(fuente,msg,colorfuente); rect.w=ttext->w; rect.h=ttext->h; SDL_BlitSurface(ttext,NULL,screen,&rect); } while(SDL_PollEvent(&event)){ switch(event.type) { case SDL_KEYDOWN: if(event.key.keysym.sym>='a'&&event.key.keysym.sym<='z'){ if(strlen(msg)<64-1) msg[strlen(msg)]=event.key.keysym.sym; } break; case SDL_QUIT: done=true; } } SDL_Flip(screen); SDL_Delay(30); } TTF_CloseFont(fuente); SDL_FreeSurface(ttext); return 0; }
Código:
#include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <SDL/SDL_ttf.h> struct tp { char cad[50]; }; int main(int argc, char *argv[]) { tp p; SDL_Surface *screen,*ttext; SDL_Event event; bool done = false; SDL_Color colorfuente={255,255,255}; SDL_Rect rect={0,0,0,0}; TTF_Font *fuente; atexit(SDL_Quit); atexit(TTF_Quit); // Iniciar SDL if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("No se pudo iniciar SDL: %s\n",SDL_GetError()); exit(1); } // Activamos modo de video screen = SDL_SetVideoMode(800,600,24,SDL_HWSURFACE); if (screen == NULL) { printf("No se puede inicializar el modo gráfico: %s\n",SDL_GetError()); exit(1); } if(TTF_Init() < 0){ printf("No se pudo iniciar SDL_TTF: %s\n",SDL_GetError()); exit(1); } fuente = TTF_OpenFont("times.ttf",15); while(!done) { SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0)); if(p.cad[0]){ ttext = TTF_RenderText_Solid(fuente,p.cad,colorfuente); rect.w=ttext->w; rect.h=ttext->h; SDL_BlitSurface(ttext,NULL,screen,&rect); } while(SDL_PollEvent(&event)){ switch(event.type) { case SDL_KEYDOWN: if(event.key.keysym.sym>='a'&&event.key.keysym.sym<='z'){ if(strlen(p.cad)<64-1) p.cad[strlen(p.cad)]=event.key.keysym.sym; } break; case SDL_QUIT: done=true; } } SDL_Flip(screen); SDL_Delay(30); } TTF_CloseFont(fuente); SDL_FreeSurface(ttext); return 0; }