[Précédente] Table Des Matières [Suivante]

Utiliser l'API Simple DirectMedia Layer

Evènements

  • Attendre un évènement

Pour attendre un évènement utiliser la fonction SDL_WaitEvent().

Astuce:
SDL possède un support universel des claviers, transformant le scancode de l'évènement et plçant son équivalent dans event.key.keysym.unicode. Ce traitement réclame d'activer l'UNICODE en appelant SDL_EnableUNICODE().
Exemple:
{
    SDL_Event event;

    SDL_WaitEvent(&event);

    switch (event.type) {
        case SDL_KEYDOWN:
            printf("La touche %s a été préssée!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
}
  • Questionner la file d'évènements.

Utiliser pour cela la fonction SDL_PollEvent().

Astuce:
Vous pouvez "jeter un coup d'oeil" aux évènements de la file d'évènements sans les enlever en passant SDL_PEEKEVENT comme paramètre de SDL_PeepEvents().
Exemple:
{
    SDL_Event event;

    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("La souris a bougé de %d,%d à (%d,%d)\n", 
                       event.motion.xrel, event.motion.yrel,
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Le bouton %d de la souris a été préssé en (%d,%d)\n",
                       event.button.button, event.button.x, event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • S'interroger sur l'état d'un évènement

Afin de manipuler les évènements directement, chaque type d'évènement à une fonction qui vous permet de contrôler l'état d'une application. Si vous utilisez exclusivement ce système, vous pouvez ignorer tous les évènements grâce à SDL_EventState(), et appeler périodiquement SDL_PumpEvents() pour mettre à jour l'état de votre application.

Astuce:
Vous pouvez cacher ou montrer le curseur de votre souris en utilisant SDL_ShowCursor().
Exemple:
{
    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("La souris est en haut à gauche!\n");
    }
}

[Précédente] Table Des Matières [Suivante]