[Anterior] Tabla De Contenido [Siguiente]

Usando la API de Simple DirectMedia Layer

Eventos

  • Esperando eventos

Esperando eventos usando la función SDL_WaitEvent().

Pista:
SDL tiene soporte de teclados internacionales, traducción de eventos de teclado y ubicación de los equivalentes UNICODE en event.key.keysym.unicode. Ya que esto conlleva cierta sobrecarga de proceso, debe habilitarse usando la función SDL_EnableUNICODE().
Ejemplo:
{
    SDL_Event event;

    SDL_WaitEvent(&event);

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

Consultar eventos usando la función SDL_PollEvent().

Pista:
Puedes mirar los eventos de la cola de eventos sin necesidad de eliminarlos pasando la acción SDL_PEEKEVENT a la función SDL_PeepEvents().
Ejemplo:
{
    SDL_Event event;

    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("El ratón se movió \
		       desde %d,%d hasta (%d,%d)\n", \
                       event.motion.xrel, event.motion.yrel, \
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Botón de ratón %d pulsado \
		       en (%d,%d)\n",
                       event.button.button, event.button.x, 
		       event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • Consultando el estado de evento

Además de manejar los eventos directamente, cada tipo de evento tiene una función que te permite consultar el estado de evento de la aplicación. Si utilizas esto exclusivamente, deberías ignorar todos los eventos de la función SDL_EventState(), y llamar a SDL_PumpEvents() periódicamente para actualizar el estado de evento de la aplicación.

Pista:
Puedes ocultar o mostrar el cursor del ratón del sistema usando la función SDL_ShowCursor().
Ejemplo:
{
    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("¡Ratón en la esquina superior \
	       izquierda!\n");
    }
}

[Anterior] Tabla De Contenido [Siguiente]