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 |
©2024 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 ©2024 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.