Foros del Web » Programación para mayores de 30 ;) » C/C++ »

mover imagen en c y SDL

Estas en el tema de mover imagen en c y SDL en el foro de C/C++ en Foros del Web. 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? ...
  #1 (permalink)  
Antiguo 05/07/2006, 09:31
Gm9
 
Fecha de Ingreso: julio-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
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
  #2 (permalink)  
Antiguo 06/07/2006, 12:52
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
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.
  #3 (permalink)  
Antiguo 06/07/2006, 20:26
Gm9
 
Fecha de Ingreso: julio-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Muchas gracias por la ayuda, lo pruebo y despues te cuento.
Saludos
  #4 (permalink)  
Antiguo 07/07/2006, 08:22
Gm9
 
Fecha de Ingreso: julio-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
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;
}
}
}
}
  #5 (permalink)  
Antiguo 07/07/2006, 15:33
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
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;
}
  #6 (permalink)  
Antiguo 07/07/2006, 16:32
Gm9
 
Fecha de Ingreso: julio-2005
Mensajes: 34
Antigüedad: 19 años, 5 meses
Puntos: 0
Te agradezco pila el ejemplo que pusiste , me va a servir mucho para empezar en esto.

Desde ya muchas gracias
Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:31.