Anuncios Google

Problema Eventos SDL

hola,

hoy me puse a estudiar SDL y intentando comprender los enventos. Asi que estuve probando los eventos y no me va bien. Por mas que pongo getchar; me sale la pantalla unos segundos y desaparece por lo que no puedo darle a la tecla, y entonces pues no me sale la imagen.

El codigo:

#include <stdlib.h>
#include <SDL.h>
#include <stdio.h>
//Estructuras
 
 
 
 
int main(int argc, char *argv[]) {
SDL_Surface *image, *screen;
SDL_Rect dest;
SDL_Event event;
 
typedef struct{
Uint8 type;
Uint8 state;
SDL_keysym keysym;
} SDL_KeyboardEvent;
 
typedef struct{
Uint8 scancode;
SDLKey sym;
SDLMod mod;
Uint16 unicode;
} SDL_keysym;
//Variables
 
int done = 0;
atexit(SDL_Quit);
// Iniciar SDL
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("No se pudo iniciar SDL: %s\n",SDL_GetError());
exit(1);
}
screen = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
if (screen == NULL) {
printf("No se puede inicializar el modo gráfico: \n",SDL_GetError());
exit(1);
}
 
Uint8 *keys;
keys=SDL_GetKeyState(NULL);
//Cargar grafico
 
//evento
if (keys[SDLK_UP] == 1) {
image = SDL_LoadBMP("nave.bmp");
 
image == NULL;
dest.x = 100;
dest.y = 100;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, NULL, screen, &dest);
}
// Mostramos la pantalla
SDL_Flip(screen);
// liberar superficie
SDL_FreeSurface(image);
 
 
/*
image = SDL_LoadBMP("nave.bmp");
if ( image == NULL ) {
printf("No pude cargar gráfico: %s\n", SDL_GetError());
}
 
dest.x = 100;
dest.y = 100;
dest.w = image->w;
dest.h = image->h;
SDL_BlitSurface(image, NULL, screen, &dest);
*/
getchar;
 
 
return 0;
}

 

Gracias de antemano Risa


Mi blog: adriel0000.wordpress.com

 

un saludo.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Como dijo Jack el destripador...

Vayamos por partes.

  1. Para qué defines SDL_Keyboardevent y SDL_keysym si esos son tipos de SDL??
  2. Como sabiamente te dice Arkanist, todo eso debería ir en un bucle. Tal y como lo tienes puesto se va a ejecutar todo el código de golpe hasta llegar a getchar, y no te va a dar tiempo a pulsar la tecla. Deberías poner un while (!done) y hacer que done=true cuando se haya pulsado esc o cuando se reciba un evento SDL_Quit
  3. Eso no son eventos. Tu estás consultando el estado del teclado, no la pila de eventos ;)

Un saludo!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Vaya

Vaya esque estaba siguiendo el tutorial ese de SDL que me recomendaste y estaba haciendo pruebas mas o menos como me sonaba hacer. Haber si consigo algo ;)

 

Edit---

A y respecto a esto:

"Eso no son eventos. Tu estás consultando el estado del teclado, no la pila de eventos ;)"

 

Como aria para que al pulsar me hiciese la accion?



Mi blog: adriel0000.wordpress.com

 

un saludo.

Imagen de joserc87

A ver.

No son eventos, pero no es que lo estés haciendo mal. Si lo que quieres es comprobar en todo momento el estado del teclado (por ejemplo para controlar un jugador), así lo estás haciendo bien. Si lo que quieres es, por ejemplo, hacer algo al pulsar el botón del mouse tendrías que usar la pila de eventos (de cabeza era algo así como while (SDL_pollevent (&event)){switch (event.type){etc}}...).

Ten en cuenta que si dejas pulsada una tecla mucho tiempo se generan muchos eventos (igual que si dejas pulsada la tecla a en el world, se escriben muchas a's).


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de adriel0000

Muchas gracias

Muchas gracias lo que yo queria era que al pulsar por ejemplo la flecha de arriva el PJ se fuese para arriva.

Imagen de Arkanist

Sabés más de C/C++ ? Es que

Sabés más de C/C++ ? Es que no estas usando ningún bucle, y entonces el programa temrinará de una pasada.

Imagen de adriel0000

un

un While?? La verdad esque se C pero C++ algo se... Yo programaba en DS con palib y se HTML y algo de PHP osea que esperiencia tengo algo pero si te refieres a poner un bucle wihile o como se llamen, probare.


Mi blog: adriel0000.wordpress.com

 

un saludo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.