elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda sobre SDL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda sobre SDL  (Leído 1,410 veces)
peterfly

Desconectado Desconectado

Mensajes: 94


Ver Perfil
duda sobre SDL
« en: 13 Marzo 2012, 22:18 pm »

hola a todos...
os explico mi duda...
tengo un codigo en el que imprime una imagen de fondo i al presionar las teclas de "arriba, abajo, derecha e izquierda" se mueve un muñequito... pues bien... lo que queria acer es que en vez de mover el muñequito, que la imagen de fondo canvie una imagen por otra, es decir que al presionar por ejemplo el boton de arriba vaya canviando de imagenes

Código:
#include <stdlib.h>
#include <SDL/SDL.h>
 
 int main(int argc, char *argv[])
{
 SDL_Surface *screen;
 SDL_Surface *fondo;
 SDL_Surface *protagonista;
 SDL_Rect destino;
int i, j;
int xProt = 320, yProt= 400;
int terminado = 0;
SDL_Event suceso;
Uint8* teclas;


 /* Tratamos de inicializar la biblioteca SDL (important posar-ho)*/
 if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) {
printf("No se pudo inicializar SDL: %s\n", SDL_GetError());
exit(1);
}/*SDL_INIT_VIDEO
   SDL_INIT_AUDIO
   SDL_INIT_TIMER
   SDL_INIT_CDROM
   SDL_INIT_JOYSTICK
   SDL_INIT_EVERYTHING*/
   /*per afegir-ne mes al costat de cada nom es separa per un
   |
   que es posa apretant "Alt Gr" + 1**/

 /* Preparamos las imagenes a mostrar */
 fondo = SDL_LoadBMP("fondo.bmp");
protagonista = SDL_LoadBMP("fondo3.bmp");

 /* Si todo ha ido bien, hacemos algo:
entrar a modo grafico y cambiar el título de la ventana */
screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE );
 if(screen == NULL) {
 printf( "Error al entrar a modo grafico: %s\n", SDL_GetError() );
SDL_Quit();
return -1;/*SDL_SWSURFACE--->Crear la superficie de video en la memoria principal
            SDL_HWSURFACE--->Crea la superficie en la memoria de vídeo
            SDL_ASYNCBLIT--->Modo de blit asíncrono. Mejora el rendimientoen
                             máquinas con más de un procesador, unque puede
                             disminuir en máquinas con una sólo procesador
            SDL_ANYFORMAT--->Fuerza el uso de los bpp de la surface actual.
                             Hay que usarlo cuando queramos crear la superficie
                             en una ventana
            SDL_HWPALETTE--->Da a SDL acceso exclusivo a la paleta de color
            SDL_DOUBLEBUF--->Sólo válido con SDL_HWSURFACE. Permite el uso de
                             doble buffer
            SDL_FULLSCREEN-->Intenta poner el modo a pantalla completa
            SDL_OPENGL------>Crea un contexto OpenGL en la superficie
            SDL_OPENGLBLIT-->Igual que el anterior, pero permite que SDL haga el
                             render 2D
            SDL_RESIZABLE--->Crea un ventana que puede cambiar de tamaño
            SDL_NOFRAME----->Crea una ventana pero sin borde*/
            
            /*per afegir-ne mes al costat de cada nom es separa per un
            |
            que es posa apretant "Alt Gr" + 1*/
   }

 /* Titulo de la ventana */
SDL_WM_SetCaption( "programa de procva!" , "Hola mundo" );

/* Parte repetitiva: hasta que se elija terminar */
 while(terminado == 0) {

 /* Dibujamos la imagen de fondo */
 /* Como tiene 207 x 211 pixeles, la repetimos varias veces */
for (i=0; i<3; i++)
for (j=0; j<3; j++) {
destino.x=207*i;
 destino.y=211*j;
SDL_BlitSurface(fondo, NULL, screen, &destino);
  }

/* Dibujamos el protagonista */
destino.x=xProt;
  destino.y=yProt;
  SDL_BlitSurface(protagonista, NULL, screen, &destino);

      /* Actualizamos la pantalla */
    SDL_Flip(screen);

     /* Miramos si hay algun suceso pendiente,
       entre ellos, peticion de abandonar el programa
         (pulsar la X de la ventana) o tecla ESC */
    while (SDL_PollEvent(&suceso)) {
        if (suceso.type == SDL_QUIT)    terminado = 1;
          if (suceso.type == SDL_KEYDOWN)
           if (suceso.key.keysym.sym == SDLK_ESCAPE)  terminado = 1;
        }

        /* Vemos el estado indivudal de las demas teclas */
      teclas = SDL_GetKeyState(NULL);
         if (teclas[SDLK_UP]) { yProt -= 2; }
  if (teclas[SDLK_DOWN]) { yProt += 2; }
       if (teclas[SDLK_LEFT]) { xProt -= 3; }
     if (teclas[SDLK_RIGHT]) { xProt += 3; }
 
    /* Y esperamos 50 ms antes de repetir */
        SDL_Delay( 50 );
}
 
 /* Finalmente, preparamos para salir */
  SDL_Quit();
   return 0;
 }

EI: juntando mensajes.

o mejor dicho...
Código:
#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
/* se incluye SDL_image.h para los metodos de
carga de imagenes */
#include <SDL/SDL_image.h>
/* metodo que permite cargar imagenes y las devuelve
como SDL_Surface */
SDL_Surface* cargarImagen(char *nombreArchivo)
{
/* SDL tiene metodos para cargar cada tipo de imagen
BMP,PCX,JPG,GIF,etc. pero este metodo (IMG_Load())
automaticamente carga imagenes sin preguntar el tipo*/
SDL_Surface *image = IMG_Load(nombreArchivo);
return image;
}
/* metodo que permite dibujar una *imagen previamente cargada
(con cargarImagen()), y dibujarla en una superficie dada
(en este caso *screen), en la posicion (x,y)*/
void dibujaImagen(SDL_Surface *screen, SDL_Surface *imagen, int x, int y)
{
/* se crea un rectangulo */
SDL_Rect rect;
/* se le asigna donde empieza en x el rectangulo */
rect.x=x;
/* se le asigna donde empieza en y el rectangulo */
rect.y=y;
/* se pega la imagen sobre screen de acuerdo a
la posicion del rectangulo */
SDL_BlitSurface(imagen, 0, screen, &rect);
}
int main(int argc, char *argv[])
{
SDL_Surface* screen;
if (SDL_Init(SDL_INIT_VIDEO)<0)
{
printf("Error al iniciar SDL:: %s",SDL_GetError());
return -1;
}
screen = SDL_SetVideoMode(640,480,16,SDL_HWSURFACE|SDL_RESIZABLE);
if (!screen)
{
printf("Error al iniciar el contexto SDL:: %s",SDL_GetError());
return -1;
}
SDL_WM_SetCaption(":: Carga de imagen con SDL ::",NULL);
/* llamamos al metodo para que cargue la imagen "foto.jpg" */
SDL_Surface* img = cargarImagen("foto.jpg");
/* preguntamos si realmente se cargo la imagen */
if (!img)
{
/* si nose cargo, salimos del programa */
printf("No se pudo cargar la imagen: %s",SDL_GetError());
return -1;
}
/* llamamos al otro metodo para que dibuje la imagen (*img)
sobre nuestra superficie buffer (*screen), en la posicion
100,100
*/
dibujaImagen(screen, img, 100, 100);
/* Este metodo tomara todos los cambios que se han hecho sobre
la superficie buffer(*screen), y las desplegara por pantalla
*/
SDL_Flip(screen);
SDL_Delay(5000);
return 1;
}

que al presionar la tecla que canvie de imagen


« Última modificación: 13 Marzo 2012, 22:42 pm por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre IS
Sugerencias y dudas sobre el Foro
Nios 2 3,741 Último mensaje 16 Febrero 2004, 07:37 am
por aNexos
Duda sobre MP3
Multimedia
__LoG26 1 2,030 Último mensaje 6 Abril 2004, 08:05 am
por __LoG26
duda sobre VB sobre RAM
Programación Visual Basic
Mr pom0 1 2,101 Último mensaje 1 Octubre 2007, 00:03 am
por Tengu
Duda sobre referencias sobre mi tesis
Dudas Generales
jdc 3 5,228 Último mensaje 3 Mayo 2011, 23:39 pm
por jdc
duda sobre formateo y cosa sobre todos los pcs de una casa
Dudas Generales
Senior++ 5 4,755 Último mensaje 27 Agosto 2011, 09:21 am
por Senior++
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines