[Назад] Содержание [Дальше]

Использование Simple DirectMedia Layer API

События

  • Ожидание событий

Для ожидания события воспользуйтесь функцией SDL_WaitEvent().

Совет:
SDL имеет международную поддержку клавиатуры, трансляцию событий клавиатуры и помещение эквивалента UNICODE в event.key.keysym.unicode. Так как это требует дополнительной обработки, это должно быть разрешено функцией SDL_EnableUNICODE().

 

Пример:

 
{
    SDL_Event event;
 
    SDL_WaitEvent(&event);
 
    switch (event.type) {
        case SDL_KEYDOWN:
            printf("The %s key was pressed!\n",
                   SDL_GetKeyName(event.key.keysym.sym));
            break;
        case SDL_QUIT:
            exit(0);
    }
}

 

  • Опрос событий

Для опроса событий используйте SDL_PollEvent().

Совет:
Вы можете считывать события из очереди без их удаления оттуда, используя параметр SDL_PEEKEVENT в функции SDL_PeepEvents().

 

Пример:

 
{
    SDL_Event event;
 
    while ( SDL_PollEvent(&event) ) {
        switch (event.type) {
            case SDL_MOUSEMOTION:
                printf("Mouse moved by %d,%d to (%d,%d)\n", 
                       event.motion.xrel, event.motion.yrel,
                       event.motion.x, event.motion.y);
                break;
            case SDL_MOUSEBUTTONDOWN:
                printf("Mouse button %d pressed at (%d,%d)\n",
                       event.button.button, event.button.x, event.button.y);
                break;
            case SDL_QUIT:
                exit(0);
        }
    }
}

 

  • Опрос состояния событий

В дополнение к обработке событий непосредственно, каждый тип события имеет функцию, которая позволяет проверить состояние приложения. Если вы используете только эту функцию, вы должны игнорировать все события от функции SDL_EventState() и периодически вызывать SDL_PumpEvents() для обработки приложением событий.

Совет:
Вы можете скрывать и показывать системный курсор мыши используя SDL_ShowCursor().

 

Пример:

 
{
    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("Mouse in upper left hand corner!\n");
    }
}

[Назад] Содержание [Дальше]