[Předchozí] Obsah [Další]

Použití Simple DirectMedia Layer API

Události

  • Čekání na události

Čekání na události pomocí funkce SDL_WaitEvent().

Tip:
SDL podporuje národní rozložení kláves tak, že události z klávesnice překládá do UNICODE ekvivalentů v event.key.keysym.unicode. Protože je to spojeno se zvýšeným nárokem na zpracování, musí se tato funkce povolit pomocí SDL_EnableUNICODE().
Příklad:
{
    SDL_Event event;

    SDL_WaitEvent(&event);

    switch (event.type) {
        case SDL_KEYDOWN:
            printf("Byla stisknuta klávesa %s!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
}
  • Vyzvedávání událostí

Vyzvednutí událostí pomocí funkce SDL_PollEvent().

Tip:
Záznamy v řadě událostí si můžete prohlédnout bez jejich odstranění předáním parametru akce SDL_PEEKEVENT funkci SDL_PeepEvents().
Příklad:
{
    SDL_Event event;

    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("Myš se pohnula o %d,%d na (%d,%d)\n", 
                       event.motion.xrel, event.motion.yrel,
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Tlačítko myši %d stisknuto na (%d,%d)\n",
                       event.button.button, event.button.x, event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}
  • Vyzvedávání stavu události

Mimo možnost správy událostí přímo má každý typ události funkci, která aplikaci umožňuje kontrolovat její stav. Pokud používáte výhradně tuto možnost, měli byste zapnout ignoraci všech událostí pomocí funkce SDL_EventState() a pro update stavu události aplikace pravidelně volat SDL_PumpEvents().

Tip:
Kurzor myši můžete skrýt nebo zobrazit pomocí SDL_ShowCursor().
Příklad:
{
    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("Myš je v levém horním rohu!\n");
    }
}

[Předchozí] Obsah [Další]