barra horizontal azul
simbolo minerva da ufrj

A Biblioteca Multimídia SDL

Valid HTML 4.0!
barra horizontal azul
©2007 - Bruno Bottino Ferreira

  1. Introdução
  2. Programa básico em SDL
  3. Funções gerais e tratamento de janelas
    1. Inicialização e deinicialização
    2. Tratamento de erros
    3. Tratamento de janelas
  4. O subsistema de vídeo
    1. Definições básicas
    2. Conseguindo informações sobre o hardware de vídeo
    3. Criando uma janela
    4. Atualizando a tela
    5. Ajustando o Gamma da tela
    6. Trabalhando com pixels
    7. Trabalhando com superfícies
    8. Carregando e salvando imagens BMP
    9. Trabalhando com transparências
    10. Máscaras
    11. Convertendo superfícies
    12. Desenhando retângulos
    13. Copiando superfícies (blitting)
    14. O cursor do mouse
  5. Eventos
    1. O que são eventos?
    2. Trabalhando com eventos
    3. Tipos de eventos
  6. Joysticks
  7. Temporizadores (Timers)
  8. Utilizando áudio com SDL_mixer
  9. Carregando imagens com SDL_image
  10. Desenhando texto com SDL_ttf
  11. Apêndice A: Códigos de teclas
  12. Apêndice B: Palestra sobre SDL
barra horizontal azul

Joysticks

A SDL provê várias funções para tratamento direto de Joysticks, apesar de que a maioria dos casos pode também ser tratada via eventos. Observe que, para poder ler dados dos joysticks, seja por eventos ou pelas funções listadas abaixo, é necessário passar o parâmetro SDL_INIT_JOYSTICK para SDL_Init ou SDL_InitSubSystem.

int SDL_NumJoysticks(void);
const char *SDL_JoystickName(int index);
SDL_Joystick *SDL_JoystickOpen(int index);
int SDL_JoystickOpened(int index);
int SDL_JoystickIndex(SDL_Joystick *joystick);
void SDL_JoystickClose(SDL_Joystick *joystick);

A função SDL_NumJoysticks retorna a quantidade de joysticks instalados. Você pode então usar SDL_JoystickName para saber o nome (dado pelo Sistema Operacional) de cada um dos joysticks instalados. Exemplo:

int i;
for(i = 0; i < SDL_NumJoysticks(); i++)
{
  printf("Nome do joystick %d: %s\n");
}

Após descobrir quantos joysticks estão instalados, antes de poder usar as funções aqui listadas, você precisa abrir (inicializar) um ou mais joysticks com a função SDL_JoystickOpen. Esta retorna um ponteiro para SDL_Joystick, uma estrutura interna da SDL cuja organização não nos interessa--apenas devemos conseguir um ponteiro para cada joystick que queiramos utilizar e passar este ponteiro para as funções chamadas. Você deve passar a SDL_JoystickOpen o índice (número de identificação) do joystick que quer abrir. Os joysticks são numerados de 0 a (SDL_NumJoysticks() - 1). Intuitivamente, a função SDL_JoystickOpened retorna um valor que indica se um dado joystick (descrito pelo ponteiro passado como parâmetro) está aberto (foi inicializado com sucesso) ou não. Já SDL_JoystickIndex retorna o índice de um joystick, passando-se um ponteiro para SDL_Joystick. Para completar, SDL_JoystickClose fecha (deinicializa) um joystick previamente aberto.

int SDL_JoystickNumAxes(SDL_Joystick *joystick);
int SDL_JoystickNumBalls(SDL_Joystick *joystick);
int SDL_JoystickNumHats(SDL_Joystick *joystick);
int SDL_JoystickNumButtons(SDL_Joystick *joystick);

Estas funções tomam como parâmetro um joystick previamente inicializado com SDL_JoystickOpen e retornam a quantidade de Eixos, Trackballs, Hats (POVs) e Botões (respectivamente) deste joystick. Os eixos normalmente correspondem ao direcional de um joystick (um D-Pad, ou um manche). Em geral os dois primeiros eixos (X e Y) são o direcional, e outros eixos que porventura existam correspondem a sliders. Em alguns casos, joysticks implementam botões extra usando eixos (explicado mais abaixo). Trackballs são bolinhas fixas, mas que podem ser giradas sobre seu próprio centro--elas funcionam mais ou menos como dois eixos (X e Y) que só têm movimento relativo (já que as trackballs não têm uma "origem" da rotação). Hats, ou POVs (Point-of-View) são botões especiais que possuem 9 estados: centro, cima, baixo, esquerda, direita e as diagonais. Você pode empurrá-los para uma das oito direções e eles voltam ao centro ao serem soltos--funcionam mais ou menos como joysticks de fliperama. Por último, deixemos por sua conta descobrir quem são os botões.

void SDL_JoystickUpdate(void);
Sint16 SDL_JoystickGetAxis(SDL_Joystick *joystick, int axis);
Uint8 SDL_JoystickGetHat(SDL_Joystick *joystick, int hat);
Uint8 SDL_JoystickGetButton(SDL_Joystick *joystick, int button);
int SDL_JoystickGetBall(SDL_Joystick *joystick, int ball, int *dx, int *dy);

Estas são as funções efetivamente usadas para ler diretamente os dados de um joystick. Antes de tentar ler qualquer dado, é preciso chamar SDL_JoystickUpdate para que as variáveis internas sobre os joysticks recebam os valores do estado do hardware. Se você ativou processamento de eventos de joystick com SDL_JoystickEventState(SDL_ENABLE), esta função é chamada automaticamente por SDL_PollEvent dentro do seu loop de eventos. Abaixo descrevemos as funções de leitura--todas elas tomam como primeiro parâmetro um ponteiro para um joystick aberto.

  1. SDL_JoystickGetAxis: retorna um valor (-32768 a 32768) representando a posição do eixo de número axis. Em geral, o eixo 0 é o X e o eixo 1 é o Y. Alguns joysticks implementam botões extras usando valores de eixo. Neste caso, um dos valores extremos do eixo (-32768 ou 32768) indica um botão pressionado, e um valor zero indica que o botão não está pressionado.
  2. SDL_JoystickGetHat: Retorna o estado do Hat (POV) indicado por hat. O valor de retorno será igual a uma das seguintes constantes: SDL_HAT_CENTERED, SDL_HAT_UP, SDL_HAT_RIGHT, SDL_HAT_DOWN, SDL_HAT_LEFT, SDL_HAT_RIGHTUP, SDL_HAT_RIGHTDOWN, SDL_HAT_LEFTUP, SDL_HAT_LEFTDOWN.
  3. SDL_JoystickGetButton: Retorna o estado do botão button: 1 (pressionado) ou 0 (solto).
  4. SDL_JoystickGetBall: Retorna o movimento relativo da trackball ball. Os valores são retornados pelos ponteiros dx e dy. Retorna -1 em caso de erro. Exemplo:

    int delta_x, delta_y;
    SDL_Joystick *joy;
    .
    .
    .
    SDL_JoystickUpdate();
    SDL_JoystickGetBall(joy, 0, &delta_x, &delta_y);
    printf("Variação da Trackball- X:%d, Y:%d\n", delta_x, delta_y);
barra horizontal azul

O arquivo ex_joystick.c exemplifica as funções aqui listadas.

barra horizontal azul
Anterior
Topo da página
Próximo