|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy
Wałaszek |
©2026 mgr Jerzy Wałaszek
|
SDL_Event
| SPIS TREŚCI |
Rozdział jest tłumaczeniem oryginalnej instrukcji dla biblioteki SDL2.
Unia zawierająca struktury dla różnych rodzajów zdarzeń.
| Uint32 | type | typ zdarzenia, wspólne dla wszystkich zdarzeń. |
| SDL_CommonEvent | common | dane wspólne. |
| SDL_WindowEvent | window | dane zdarzenia okna. |
| SDL_KeyboardEvent | key | dane zdarzenia klawiatury. |
| SDL_TextEditingEvent | edit | dane zdarzenia edycji. |
| SDL_TextInputEvent | text | dane zdarzenia wprowadzania tekstu. |
| SDL_MouseMotionEvent | motion | dane zdarzenia ruchu myszki. |
| SDL_MouseButtonEvent | button | dane zdarzenia przycisku myszki. |
| SDL_MouseWheelEvent | wheel | dane zdarzenia kółka myszki. |
| SDL_JoyAxisEvent | jaxis | dane zdarzenia ruchu joysticka. |
| SDL_JoyBallEvent | jball | dane zdarzenia ruchu kulką joysticka. |
| SDL_JoyHatEvent | jhat | dane zdarzenia ruchu kursorem joysticka. |
| SDL_JoyButtonEvent | jbutton | dane zdarzenia przycisku joysticka. |
| SDL_JoyDeviceEvent | jdevice | dane zdarzenia urządzenia joysticka. |
| SDL_ControllerAxisEvent | caxis | dane zdarzenia ruchu manetką kontrolera gier. |
| SDL_ControllerButtonEvent | cbutton | dane zdarzenia przycisku kontrolera gier. |
| SDL_ControllerDeviceEvent | cdevice | dane zdarzenia urządzenia kontrolera gier. |
| SDL_AudioDeviceEvent | adevice | dane zdarzenia urządzenia audio (>= SDL 2.0.4). |
| SDL_QuitEvent | quit | dane zdarzenia zakończenia aplikacji. |
| SDL_UserEvent | user | dane zdarzenia zdefiniowanego przez użytkownika. |
| SDL_SysWMEvent | syswm | dane zdarzenia systemowego okna. |
| SDL_TouchFingerEvent | tfinger | dane zdarzenia dotknięcia palcem. |
| SDL_MultiGestureEvent | mgesture | dane gestu wielopalcowego. |
| SDL_DollarGestureEvent | dgesture | dane gestu wielopalcowego. |
| SDL_DropEvent | drop | dane zdarzenia przeciągania i upuszczania. |
Struktura SDL_Event posiada dwa zastosowania:
Dokonywane jest to albo za pomocą SDL_PollEvent(), albo SDL_PeepEvents(). Użyjemy SDL_PollEvent() i przejdziemy krok po kroku przez przykład.
Najpierw tworzymy pustą strukturę SDL_Event.
SDL_Event test_event; |
SDL_PollEvent() usuwa kolejne zdarzenie z kolejki zdarzeń. Jeśli w kolejce nie ma zdarzeń, zwraca 0, w przeciwnym razie zwraca 1. Do przetwarzania zdarzeń po kolei używamy pętli while.
while (SDL_PollEvent(&test_event)) {
|
Funkcja SDL_PollEvent() przyjmuje jako parametr wskaźnik do struktury SDL_Event, która ma zostać wypełniona informacjami o zdarzeniu. Wiemy, że przy usunięciu przez SDL_PollEvent() zdarzenia z kolejki, informacja o nim zostanie umieszczona w naszej strukturze test_event, wiemy również, że rodzaj zdarzenia zostanie umieszczony w polu type struktury test_event. Zatem do osobnej obsługi każdego zdarzenia, stosujemy polecenie switch.
switch (test_event.type) {
|
Musimy wiedzieć, jakiego rodzaju zdarzeń poszukujemy oraz musimy znać ich typ. Zatem załóżmy, że chcemy wykryć, gdzie użytkownik przesunął kursor myszki w aplikacji. Przeglądamy typy zdarzeń i zauważamy, że SDL_MOUSEMOTION jest prawdopodobnie tym zdarzeniem, którego szukamy. Spojrzenie na tabelę poniżej mówi nam, że zdarzenia SDL_MOUSEMOTION są obsługiwane wewnątrz struktury SDL_MouseMotionEvent, która należy do unii SDL_Event. Możemy sprawdzić wystąpienie zdarzenia typu SDL_MOUSEMOTION wewnątrz polecenia switch w sposób następujący:
case SDL_MOUSEMOTION: |
Teraz wystarczy nam odczytać informację z pola motion struktury test_event.
printf("We got a motion event.\n");
printf("Current mouse position is: (%d, %d)\n", test_event.motion.x, test_event.motion.y);
break;
default:
printf("Unhandled Event!\n");
break;
}
}
printf("Event queue empty.\n");
|
Możliwe jest również wstawianie zdarzeń do kolejki zdarzeń i wykorzystywanie jej w ten sposób do obustronnej komunikacji. Obie funkcje SDL_PushEvent() i SDL_PeepEvents() pozwalają ci na umieszczanie zdarzeń w kolejce. Zwykle używa się ich ze zdarzeniem SDL_USEREVENT, jednakże możesz również wstawiać fałszywe zdarzenia, jeśli chcesz. Tworzenie własnych zdarzeń polega po prostu na wybraniu pożądanego rodzaju zdarzenia, ustawieniu pola type oraz wypełnienia odpowiednich pól struktury informacjami.
SDL_Event user_event; user_event.type = SDL_USEREVENT; user_event.user.code = 2; user_event.user.data1 = NULL; user_event.user.data2 = NULL; SDL_PushEvent(&user_event); |
Związek pomiędzy rodzajami zdarzeń a polami unii
| Rodzaj zdarzenia | Struktura zdarzenia | Pole SDL_Event |
| SDL_AUDIODEVICEADDED SDL_AUDIODEVICEREMOVED |
SDL_AudioDeviceEvent | adevice |
| SDL_CONTROLLERAXISMOTION | SDL_ControllerAxisEvent | caxis |
|
SDL_CONTROLLERBUTTONDOWN SDL_CONTROLLERBUTTONUP |
SDL_ControllerButtonEvent | cbutton |
|
SDL_CONTROLLERDEVICEADDED SDL_CONTROLLERDEVICEREMOVED SDL_CONTROLLERDEVICEREMAPPED |
SDL_ControllerDeviceEvent | cdevice |
| SDL_DOLLARGESTURE SDL_DOLLARRECORD |
SDL_DollarGestureEvent | dgesture |
| SDL_DROPFILE SDL_DROPTEXT SDL_DROPBEGIN SDL_DROPCOMPLETE |
SDL_DropEvent | drop |
| SDL_FINGERMOTION SDL_FINGERDOWN SDL_FINGERUP |
SDL_TouchFingerEvent | tfinger |
| SDL_KEYDOWN SDL_KEYUP |
SDL_KeyboardEvent | key |
| SDL_JOYAXISMOTION | SDL_JoyAxisEvent | jaxis |
| SDL_JOYBALLMOTION | SDL_JoyBallEvent | jball |
| SDL_JOYHATMOTION | SDL_JoyHatEvent | jhat |
| SDL_JOYBUTTONDOWN SDL_JOYBUTTONUP |
SDL_JoyButtonEvent | jbutton |
| SDL_JOYDEVICEADDED SDL_JOYDEVICEREMOVED |
SDL_JoyDeviceEvent | jdevice |
| SDL_MOUSEMOTION | SDL_MouseMotionEvent | motion |
| SDL_MOUSEBUTTONDOWN SDL_MOUSEBUTTONUP |
SDL_MouseButtonEvent | button |
| SDL_MOUSEWHEEL | SDL_MouseWheelEvent | wheel |
| SDL_MULTIGESTURE | SDL_MultiGestureEvent | mgesture |
| SDL_QUIT | SDL_QuitEvent | quit |
| SDL_SYSWMEVENT | SDL_SysWMEvent | syswm |
| SDL_TEXTEDITING | SDL_TextEditingEvent | edit |
| SDL_TEXTINPUT | SDL_TextInputEvent | text |
| SDL_USEREVENT | SDL_UserEvent | user |
| SDL_WINDOWEVENT | SDL_WindowEvent | window |
| Inne zdarzenia | SDL_CommonEvent | brak, użyj SDL_EventType |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.