17/11/2008, 15:35
|
| | Fecha de Ingreso: mayo-2007 Ubicación: Buenos aires
Mensajes: 19
Antigüedad: 17 años, 7 meses Puntos: 0 | |
duda en ingreso de texto online con sdl hi gente tengo un codigo para ingresar texto desde pantalla con sdl
y funciona bien. usa una cadena char msg.
por favor cambien esto si usan otra fuente
//fuente = TTF_OpenFont("ariblk.ttf",15);
Código:
#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;
}
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
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;
}
|