Desarrollo de videojuegos en SDL VII - Joystick

Joystick
SDL le dedica un subsistema sólo para ello, pero no es le más completo debido a que hay muchos y no siguen un estándar.


Gestión mediante eventos
Los ejes de movimiento del joystick producen el evento de tipo SDL_JoyAxisEvent:
typedef struct{
Uint8 type; // al mover el eje produce SDL_JOYAXISMOTION
Uint8 which; //que joystick
Uint8 axis; //que eje
Sint16 value; //valor del movimiento
} SDL_JoyAxisEvent;

El valor del movimiento depende de si es un eje gradual o analógico (-32768,32768) o un eje digital o determinista (mínimo, cero, máximo).

En el caso de los botones producen:
typedef struct{
Uint8 type; // SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP
Uint8 which; //que joystick
Uint8 button; //que botón
Uint8 state; //redundante: SDL_PRESSED, SDL_RELEASED
} SDL_JoyButtonEvent;

Inicialización del joystick
Tenemos que inicial el subsistema del joystick al inicio con SDL_Init, pasańdole la constante SDL_INIT_JOYSTICK, para posteriormente abrir el joystick. Tener en cuenta que los index empiezan en cero.
SDL_Joystick* SDL_JoystickOpen(int index);

Cerrar el joystick
void SDL_JoystickClose(SDL_Joystick *joystick);

Que joysticks están abiertos:
int SDL_JoystickOpened(int index);


Eventos menos usados en Joysticks corresponden a los minijoystick o hat, el cual tiene 9 posiciones.
typedef struct{
Uint8 type;
Uint8 which;
Uint8 hat;
Uint8 value;
}SDL_JoyHatEvent

Las nueve posiciones de las que dispone se determinan con 5 constantes:
  • SDL_HAT_CENTERED
  • SDL_HAT_UP
  • SDL_HAT_RIGHT
  • SDL_HAT_LEFT
  • SDL_HAT_DOWN
Si no queremos hacer combinaciones con OR, tenemos las siguientes constantes:
  • SDL_HAT_RIGHTUP
  • SDL_HAT_RIGHTDOWN
  • SDL_HAT_LEFTUP
  • SDL_HAT_LEFTDOWN

Otro elemento menos usado todavía es el trackball, su evento sólo es válido cuando no está integrado en un ratón o teclado.
typedef struct{
Uint8 type;
Uint8 which;
Uint8 ball; //SDL presupone que puede haber varios en un joystick
Sint16 xrel, yrel;
}SDL_JoyBallEvent;


Acceso directo al Joystick
Además de consultar el estado del joystick, podemos saber sus características (botones y ejes).

Número de joysticks
int SDL_NumJoysticks(void);

Nombre del Joystick
const char *SDL_JoystickName(int index);

Número de ejes
int SDL_JoysticksNumAxes(SDL_Joystick *joystick);

Número de botones
int SDL_JoysticksNumButtons(SDL_Joystick *joystick);

Etiquetas: ,,. Guarda el enlace permanente.

Deja un comentario ^^