[Zurück] Inhaltsverzeichnis [Weiter]

Verwendung der "Simple DirectMedia Layer"-API

Ereignisse

  • Auf Ereignisse warten

Auf Ereignisse wartet man mit der Funktion SDL_WaitEvent().

Tip:
SDL unterstützt internationale Tastaturen. Es übersetzt Tastatur-Ereignisse und legt die Unicode-Äquivalente in event.key.keysym.unicode ab. Weil das ein bisschen Zeit kostet, muß es erst mit SDL_EnableUNICODE() eingeschaltet werden.
Beispiel:
{
    SDL_Event ereignis;

    SDL_WaitEvent(&ereignis);

    switch (ereignis.type) {
        case SDL_KEYDOWN:
            printf("Die Taste '%s' wurde gedrückt!\n",
                   SDL_GetKeyName(ereignis.key.keysym.sym));
            break;
	case SDL_QUIT:
            exit(0);
    }
}
  • Ereignisse abfragen (Polling)

Mit der Funktion SDL_PollEvent() werden Ereignisse abgefragt.

Tip:
Man kann einen Blick auf die Ereignisse in der Queue werfen, ohne sie daraus zu entfernen, indem man SDL_PEEKEVENT an SDL_PeepEvents() übergibt.
Beispiel:
{
    SDL_Event ereignis;

    while ( SDL_PollEvent(&ereignis) ) {
        switch (ereignis.type) {
            case SDL_MOUSEMOTION:
                printf("Die Maus wurde um %d,%d Pixel nach (%d,%d) bewegt.\n", 
                       ereignis.motion.xrel, ereignis.motion.yrel,
                       ereignis.motion.x, ereignis.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Die Maustaste Nummer %d wurde bei (%d,%d) gedrückt.\n",
                       ereignis.button.button, ereignis.button.x, ereignis.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • Ereignis-Zustand abfragen

Zusätzlich zu der direkten Behandlung hat jeder Ereignistyp eine Funktion, in der der Ereignis-Zustand des Programms abgefragt werden kann. Wenn nur diese Methode verwendet wird, sollten mit der Funktion SDL_EventState() alle Ereignisse ignoriert und nur mit SDL_PumpEvents() weitergeleitet werden.

Tip:
Mit SDL_ShowCursor() kann der Mauszeiger des Systems versteckt werden.
Beispiel:
{
    SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
}

void MausOrtPruefen(void)
{
    int maus_x, maus_y;

    SDL_PumpEvents();

    SDL_GetMouseState(&maus_x, &maus_y);
    if ( (maus_x < 32) && (maus_y < 32) ) {
        printf("Die Maus ist in der linken oberen Ecke!\n");
    }
}

[Zurück] Inhaltsverzeichnis [Weiter]