[Precedente] Contenuti [Successivo]

Usare la Simple DirectMedia Layer API

Gli Eventi

  • Attesa di Eventi

Per l'attesa di eventi e' utilizzata la funzione SDL_WaitEvent().

Suggerimento:
SDL ha il sopporto internazionale per la tastiera, traduzione degli eventi associati ai tasti e piazzamento dell'equivalente UNICODE nel membro event.key.keysym.unicode. Dal momento che questo processo produce oveheard, deve essere abilitato con la funzione SDL_EnableUNICODE().
Esempio:
{
    SDL_Event event;

    SDL_WaitEvent(&event);

    switch (event.type) {
        case SDL_KEYDOWN:
            printf("Il tasto %s e' stato premuto!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
}
  • Controllo degli Eventi

Il controllo degli eventi e' realizzato dalla funzione SDL_PollEvent().

Suggerimento:
E' possibile leggere gli eventi nella coda degli eventi senza rimuoverli passando SDL_PEEKEVENT alla funzione SDL_PeepEvents().
Esempio:
{
    SDL_Event event;

    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("Il Mouse e' stato mosso da %d,%d " \
                           "a (%d,%d)\n", 
                       event.motion.xrel, event.motion.yrel,
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Il pulsante %d del Mouse %d e' stato " \
                           "premuto a (%d,%d)\n",
                       event.button.button, event.button.x, 
                       event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • Controllo dello stato degli eventi

Oltre a poter gestire in modo diretto gli eventi, ogni tipo di evento ha una funzione che permette di controllare il suo stato. Se si usa esclusivamente questo sistema, e' possibile ignorare tutti gli eventi con la funzione SDL_EventState(), e chiamare la funzione SDL_PumpEvents() in modo periodico per aggiornare lo stato degli eventi dell'applicazione.

Suggerimento:
E' possibile mostrare o nascondere il puntatore del mouse con la funzione SDL_ShowCursor().
Esempio:
{
    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("Il Mouse e' nell'angolo in alto a sinistra!\n");
    }
}

[Precedente] Contenuti [Successivo]