[Anterior] Conteúdo [Próxima]

Usando a API Simple DirectMedia Layer

Eventos

  • Esperando por eventos

Espere por eventos usando a função SDL_WaitEvent().

Dica:

SDL tem suporte a teclado internacional, traduzindo eventos de teclas e posicionando o equivalente UNICODE em event.key.keysym.unicode (agora tente repetir isto 3 vezes seguidas sem parar).Já que isto envolve processamento mais pesado, esta tradução deve ser habilitada com SDL_EnableUNICODE().

Exemplo:
{
    SDL_Event event;

    SDL_WaitEvent(&event);

    switch (event.type) {
        case SDL_KEYDOWN:
            printf("A tecla %s foi pressionada!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
}
  • Consultando eventos

Consulte eventos usando a função SDL_PollEvent().

Dica:
Você pode "espiar" eventos na área de eventos pendentes sem remove-los ,passando a ação  SDL_PEEKEVENT para  SDL_PeepEvents().
Exemplo:
{
    SDL_Event event;

    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("Mouse foi movido de %d,%d para (%d,%d)\n", 
                       event.motion.xrel, event.motion.yrel,
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("botão %d do mouse pressionado em (%d,%d)\n",
                       event.button.button, event.button.x, event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • Consultando o estado dos eventos

Alem de manipular eventos diretamente, cada tipo de evento tem uma função que permite você checar o estado dos eventos da  aplicação.Se você usar isto exclusivamente, você deve ignorar todos os eventos com a função SDL_EventState(), e chamar SDL_PumpEvents() periodicamente para atualizar o estado dos eventos da aplicação.

Dica:

Você pode esconder ou exibir o cursor do mouse do sistema usando SDL_ShowCursor().

Exemplo:
{
    SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
}

void CheckMouseHover(void)
{
    int mouse_x, mouse_y;

    SDL_PumpEvents();

    SDL_GetMouseState(&mouse_x, &mouse_y);
    if ( (mouse_x < 32) && (mouse_y < 32) ) {
        printf("o mouse esta no canto superior esquerdo!\n");
    }
}

[Anterior] Conteúdo [Próxima]