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

Использование 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"); } }

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