se como cargar las imagenes y como utilizar el teclado en SDL pero no he podido mover nada.
Desde ya muchas gracias.
Saludos

| |||
mover imagen en c y SDL hola, mi pregunta es la siguiente ¿como ouedo hacer para mover una imagen con las flechas del teclado en c y usando la libreria SDL? se como cargar las imagenes y como utilizar el teclado en SDL pero no he podido mover nada. Desde ya muchas gracias. Saludos ![]() |
| |||
usa variables globales si es que estas usando funciones, las cuales se modifiquen en los eventos de teclas, podrian ser int x, y; y en el vento key aumentar o disminuir segun up, dow, left o right. ya al colocar el bitmap grafico, lo haces con las cordenandas z, y; Saludos. |
| |||
Muchas gracias por la ayuda, lo pruebo y despues te cuento. Saludos ![]() |
| |||
Te cuento que probe con variables globales y no me funciono , dejo el codigo para ver cual es mi error. Les comento que soy medio novato con esto y sepan disculpar si hay algun error tonto. Desde ya muchas gracias Saludos ![]() #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <math.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> SDL_Surface *screen,*image;; SDL_Rect dest; SDL_Event event; Uint8 *keys; int done=0; int x,y; void cargar(){ image=SDL_LoadBMP("imagen.bmp"); dest.x=x; dest.y=y; dest.w=image->w; dest.h=image->h; SDL_BlitSurface(image,NULL,screen,&dest); SDL_Flip(screen); SDL_FreeSurface(image); } int main(int argc, char *argv[]){ if(SDL_Init(SDL_INIT_VIDEO)<0){ printf("NO SE PUEDE INICIAR MODO DE VIDEO\n",SDL_GetError()); exit(1); } screen = SDL_SetVideoMode(640,480,24,SDL_SWSURFACE|SDL_DOUB LEBUF); if(screen==NULL){ printf("NO SE PUEDE GENERAR PANTALLA\n",SDL_GetError()); exit(1); } atexit(SDL_Quit); cargar(); while(done==0){ keys=SDL_GetKeyState(NULL); while(SDL_PollEvent(&event)){ if(keys[SDLK_RIGHT]){ x+=5; } if(keys[SDLK_F2]){ done=1; } } } } |
| |||
Tienes la idea y los conocimientos, como que te falta estilo, jeje. no en realidad hay unos pequeños errores, y faltan algunos detalles de SDL. te dejo el codigo a mi estilo, jeje, nunca escribo por los demas solo les oriento pero hoy practique un poco con tu aplicacion y pues te dejo el resultados: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <SDL/SDL.h> void Mover(int* x, int* y) { Uint8* keystate = SDL_GetKeyState(NULL); if(keystate[SDLK_LEFT]) --*x; if(keystate[SDLK_RIGHT]) ++*x; if(keystate[SDLK_UP]) --*y; if(keystate[SDLK_DOWN]) ++*y; } void Cargar(SDL_Surface* screen, int* x, int* y) { SDL_Rect dest; SDL_Surface* image = SDL_LoadBMP("imagen.bmp"); dest.x=*x; dest.y=*y; dest.w=image->w; dest.h=image->h; SDL_BlitSurface(image,NULL,screen,&dest); SDL_FreeSurface(image); } int main(int argc, char *argv[]) { SDL_Surface *screen; SDL_Event event; int done = 0; int x = 0; int y = 0; int background; SDL_Rect r; if(SDL_Init(SDL_INIT_VIDEO)<0) { printf("NO SE PUEDE INICIAR MODO DE VIDEO %s\n",SDL_GetError()); exit(-1); } atexit(SDL_Quit); screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_DOUB LEBUF); if(screen==NULL) { printf("NO SE PUEDE GENERAR PANTALLA %s\n",SDL_GetError()); exit(1); } r.x = 0; r.y = 0; r.w = screen->w; r.h = screen->h; background = SDL_MapRGB(screen->format, 0,0,0); do { if(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: done = 1; break; default: done = 0; }; break; case SDL_QUIT: done = 1; break; } } SDL_FillRect(screen, &r, background); Mover(&x, &y); Cargar(screen, &x, &y); SDL_Flip(screen); }while(!done); return 0; } |
| |||
Te agradezco pila el ejemplo que pusiste , me va a servir mucho para empezar en esto. Desde ya muchas gracias Saludos ![]() |