SDL_GetKeyState

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

SDL_GetKeyState

Notapor migueleitorone » Mié Ene 26, 2011 2:58 pm

Bon dia, tengo un problemilla con un programa que no le da la gana de funcionar. Simplemente era un codigo de prueba para empezar a tocar el teclado con SDL. Se supone que el programa tendria que escribir "Tecla arriba pulsada" cuando pulso esa tecla, pero por mucho que la pulse no reacciona. Alguna solucion?? :
Código: Seleccionar todo
#include "SDL.h"
#include "SDL_image.h"
#include "SDL_ttf.h"
#include <conio.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   ////////////////////////
   ///INICIALIZAR MODO VIDEO
   ////////////////////////
   if(SDL_Init(SDL_INIT_VIDEO)== -1)//Inicializar SDL, modulo de video, comprobando errores
   {
      printf("SDL_Init: %s ", SDL_GetError()); //Mostrar informe de error y salir
      getch();
      return 0;
   }

   SDL_Surface *screen = SDL_SetVideoMode(400, 400, 32, SDL_HWSURFACE|SDL_NOFRAME); //Se crea la superficie principal, que servira como ventana y se verifican errores
   if(!screen) //Si screem == 0, error
   {
      printf("SDL_SetVideoMode : %s", SDL_GetError()); //Mostrar informe de error y salir
      getch();
      return 0;
   }

   ///////////////////////////
   ///INICIALIZAR FUENTES
   ///////////////////////////
   TTF_Init(); //Inicializar TTF
   TTF_Font *fuente = TTF_OpenFont("fuente.ttf", 15); //Se crea una variable de la struct font, para almacenar la fuente a usar y el tamaño
   SDL_Color color = {255, 255, 255}; //Definir color a usar
   SDL_Surface *imgtexto; //Se crea una superficie donde almacenar una imagen con el texto que le pasemos mas adelante
   
   ///////////////////////////
   ///INICIALIZAR TECLADO
   //////////////////////////
   Uint8 *tecla; //Se crea una variable para almacenar el estado del teclado

   ////////////////////////
   ///LOOP
   ////////////////////////
   bool done = false;
   while(!done)//Mientras done sea false, el loop se ejecuta
   {
      tecla = SDL_GetKeyState(0); //Almacenar el estado del teclado al principio de cada loop
      if(tecla[SDLK_UP])
      {
         printf("tecla arriba pulsada");
      }
   }
   
   getch();
   return 0;
}


Gracias :)
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España

Re: SDL_GetKeyState

Notapor pablo9891 » Jue Ene 27, 2011 12:55 am

Yo tambien acostumbro a usar el SDL_GetKeyState, lo que te esta faltando es

Código: Seleccionar todo
SDL_PumpEvents();


por lo que te deberia quedar asi:

Código: Seleccionar todo
   while(!done)//Mientras done sea false, el loop se ejecuta
   {

      SDL_PumpEvents();


      tecla = SDL_GetKeyState(0); //Almacenar el estado del teclado al principio de cada loop
      if(tecla[SDLK_UP])
      {
         printf("tecla arriba pulsada");
      }
   }


mediante esta funcion vos lo que estas haciendo es tomar todos los eventos de entrada y los colocas dentro de una cola, de donde despues seran tomados por el SDL_GetKeyState(), si no lo pones no estas tomando ningun evento desde los dispositivos de entrada

es lo mismo colocar

Código: Seleccionar todo
SDL_GetKeyState(0);


pero siempre se me hizo mas apropiado utilizarlo de esta forma

Código: Seleccionar todo
SDL_GetKeyState(NULL);


espero que te sirva...
pablo9891
 
Mensajes: 32
Registrado: Lun Dic 28, 2009 2:48 am

Re: SDL_GetKeyState

Notapor migueleitorone » Jue Ene 27, 2011 3:19 pm

Que raro por que hasta ahora habia probado un codigo de ejemplo que no tenia la funcion SDL_PumpEvents() y funcionaba sin problemas.
Bueno, ya puedo seguir con esto, muchas gracias pablo :D
migueleitorone
 
Mensajes: 88
Registrado: Mié Ago 18, 2010 2:59 pm
Ubicación: Barcelona, España


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado