Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Eventos de teclado en SDL

Preguntas y respuestas sobre el lenguaje de programacion C/C++

Eventos de teclado en SDL

Notapor Voyez el Mié Dic 05, 2007 12:21 pm

No sé si habreis leido la duda planteada en mi otro tema, sobre las funciones getchar y cin.get().
En este caso la duda és muy similar, pero lo separo porque aunque el objetivo es el mismo el problema és muy diferente.

La intencion es captar eventos de teclado, és decir, determinar si se presiona o se suelta una tecla, y cual és, lo cual se supone que és una de las funciones basicas de la libreria SDL.
El problema es que he estado probando con todo tipo de funciones, y parece que el teclado no genere ningun tipo de evento.

Mirad, por ejemplo, uno de los codigos que utilizo:


Código: Seleccionar todo
#include <SDL/SDL.h>

void esperar(void);

int main( int argc, char *argv[])
{
     SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
     esperar();
     SDL_Quit();
     return 0;
}

void esperar(void)
{
     SDL_Event event;

     SDL_WaitEvent (&event);
}


El programa compila sin problemas, pero cuando lo ejecuto, se queda "a la espera" sin reaccionar ante NADA hasta que mato directamente el proceso.
Lo "debugo", con el dbg y el programa funciona a la perfeccion hasta que llega a SDL_WaitEvent(&event). Ahi, se queda "esperando" a los supuestos eventos, ya sean de teclado, de mouse, o de lo que sea, pero parece que ninguna de las entradas de mi ordenador genera eventos que SDL_WaitEvent pueda detectar.

Tambien he provado cosas mas concretas como:

Código: Seleccionar todo
void espera(void)
{
     SDL_Event event;

     while(1)
     {
          SDL_PollEvent(&event);
          if(event.type == SDL_KEYDOWN)break;
          printf("no hay tecla apretada\n");
     }
}

Y nada.
Obtengo una preciosa columna de "no hay tecla apretada"s, que no se deja de escribir hasta que, de nuevo, mato el proceso.
Tambien he provado algunos ejemplos sacados directamente de la documentacion de SDL y lo mismo: nada. Como si no existieran eventos en mi ordenador.

Por cierto, por si a alguien se le ocurre preguntar, todo esto lo compilo en gcc en una terminal de kubuntu corriendo en un Pentium 4 que tiene unos 4 años (osea que no és una anticualla) con el comando:

g++ -Wall -lSDL Prueva.cpp, -o prueva

Alguien tiene alguna idea al respeto?
Gracias de nuevo
Voyez
Novato
Novato
 
Mensajes: 3
Registrado: Mié Dic 05, 2007 12:12 pm

Re: Eventos de teclado en SDL

Notapor latindeveloper el Lun Dic 10, 2007 3:04 pm

Por alguna parte encontré este codigo que puede servirte:

Código: Seleccionar todo
SDL_Event event;

/* Verificar eventos */
while(SDL_PollEvent(&event)){  /* Mientras exista enventos.*/
  switch(event.type){ 
    case SDL_KEYDOWN:  /* Evento del teclado*/         
      printf("Presiono una tecla\n");
      break;
    case SDL_MOUSEMOTION:

    default: /* si es algo que no esperabamos */
      printf("I don't know what this event is!\n");
  }
}


He traducido algunas partes del codigo.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:29 pm
Ubicación: Peru

Notapor Voyez el Mar Dic 11, 2007 7:33 am

Muchas Grácias, pero es és precisamente uno de los códigos que probé, sacado de la documentación de http://www.libsdl.org, y tampoco me funcionó.

Ahora, de hecho, he solucionado el problema:
Cuando utilizas SDL, primero la tienes que inicializar con la funcion SDL_Init(argumentos) y a continuación, cargar un modo de video con la funcion SDL_SetVideoMode(argumentos) para poder utilizar el entorno gráfico.
Si os fijais, mi codigo anterior no cargaba el modo de video, porque queria probar solo los eventos, y nunca pensé que estos dependieran del entorno gráfico. Pero luego, probando, vi que si cargo el entorno gráfico los eventos funcionan a la perfeccion, tanto teclado como ratón.

Así pues, ya sabeis, en SDL está todo relacionado, asi que mejor ir directamente al grano y después depurar que pararse a probar cada función por separado.

Y ya que estamos con el tema, dejaré la hecha la pregunta evidente:
Alguien sabe el porqué de esta dependéncia entre eventos y modo gráfico?
Voyez
Novato
Novato
 
Mensajes: 3
Registrado: Mié Dic 05, 2007 12:12 pm


Volver a C/C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron