BasicC/Zdarzenia
GetEvents
[edytuj]Komenda wywołuje GetSDLEvents(); powoduje odczyt zdarzeń systemowych:
- W zmiennej WindowEvent ustawiane są bity odpowiadające numerom wykrytych zdarzeń okiennych
- Zmienna Quit otrzymuje wartość 1 jeśli program ma być zakończony, np. zamknięto okno
- W zmiennej InKey zapisany zostaje kod SDL_Keycode ostatnio wciśniętego klawisza
- W zmiennej wskazywanej przez SDLTEXT$ zapisywane są wprowadzone znaki jeśli wywołano StartTextInput
- Uaktualniana jest tablica SDLKeyboardState wciśniętych klawiszy
- Uaktualniane są zmienne MouseK MouseX MouseY zawierające stan myszy
InKey(K)
[edytuj]Zwraca 1 jeśli wciśnięto klawisz o kodzie SDL_Scancode K, 0 jeśli nie.
Istnieje kilka różnic między funkcją InKey(K) a zmienną InKey. Funkcja działa w oparciu o SDL_Scancode, które są fizycznymi kodami klawiszy niezależnymi od systemu. Zmienna zawiera SDL_Keycode zależne od systemu, system zwykle też generuje okresowe powtórzenia zdarzenia wciśnięcia klawisza, jeśli jest on cały czas wciśnięty. Zdarzenie puszczenia klawisza generowane jest tylko raz, w momencie faktycznego jego puszczenia, jednak nie jest ono obsługiwane przez GetSDLEvents, jeśli jest taka potrzeba - należy samodzielnie dodać jego obsługę lub napisać własną procedurę obsługi zdarzeń. Zmienna zawiera kod tylko 1 klawisza, funkcja odczytuje stan tablicy SDLKeyboardState zawierającej informacje o wszystkich klawiszach, zamiast InKey(K) można użyć SDLKeyboardState[K]. Jednak zwykle ilość prawidłowych informacji o wciśniętych klawiszach jednocześnie jest ograniczona do kilku, prawdopodobnie z powodów sprzętowych.
Ogólnie zmienna InKey lepiej się nadaje do obsługi menu czy wprowadzania tekstu, a funkcja do sterowania ruchomymi obiektami, np. w grach.
Tabela kodów:
https://eduinf.waw.pl/inf/prg/011_sdl2/1128.php
WaitInKey
[edytuj]Wstrzymuje działanie programu (pozornie) do momentu wciśnięcia klawisza lub ustawienia zmiennej Quit na 1. Wykonuje do GetSDLEvents(); while(InKey==0 && Quit==0);
WaitMouseD
[edytuj]Czeka na wciśnięcie klawisza myszy lub ustawienie Quit. Wykonuje do GetSDLEvents(); while(MouseK==0 && Quit==0);
WaitMouseU
[edytuj]Czeka na puszczenie klawiszy myszy lub ustawienie Quit. Wykonuje do GetSDLEvents(); while(MouseK>0 && Quit==0);
StartTextInput(T)
[edytuj]Uruchamia tryb wprowadzania tekstu z klawiatury. Od tego momentu zmienna T (typu STRING, ew. inna tablica char*), na którą wskazuje SDLTEXT$, jest zapełniana wprowadzanymi znakami po wywołaniu GetEvents. Wywołuje {SDL_StartTextInput();SDLTEXT$=T;}
StopTextInput
[edytuj]Zatrzymuje tryb wprowadzania tekstu. Wywołuje SDL_StopTextInput();
GetFinger(F)
[edytuj]Zapisuje do zmiennej SDLFinger informacje o palcu o numerze F dotykającym ekranu 0. Wywołuje SDLFinger=SDL_GetTouchFinger(SDLTouchID,F);
Odczyt zmiennej:
SDLFinger->id identyfikator dotyku
SDLFinger->x położenie na osi x zdarzenia dotyku, znormalizowane (0...1)
SDLFinger->y położenie na osi y zdarzenia dotyku, znormalizowane (0...1)
SDLFinger->pressure zastosowany nacisk, znormalizowany (0...1)
Uwaga! Wywołanie tej komendy dla palca, który nie dotyka ekranu powoduje krytyczny błąd.
NumFingers
[edytuj]Podaje ilość palców dotykających ekranu dotykowego 0. Wywołuje SDL_GetNumTouchFingers(SDLTouchID)
Stick(J,S)
[edytuj]Podaje wychylenie osi o nr S joysticka o nr J. Numeracja jest od 0. Wynik z przedziału (-32768 do 32767). Wywołuje SDL_JoystickGetAxis(SDLJoystick[J], S)
Strig(J,S)
[edytuj]Podaje stan przycisku nr S joysticka J. 1 - wciśnięty, 0 - nie. Wywołuje SDL_JoystickGetButton(SDLJoystick[J],S)
NumJoys
[edytuj]Podaje ilość podłączonych joysticków. Wywołuje SDL_NumJoysticks()
SetMouse(x,y)
[edytuj]Ustawia wskaźnik myszy w pozycji x,y.
ShowM(s)
[edytuj]Ustawia widoczność kursora, dla s: SDL_ENABLE widoczny, SDL_DISABLE ukryty, SDL_QUERY aby sprawdzić bieżący stan widoczności kursora.
WindowEvent(E)
[edytuj]Sprawdza wystąpienie wydarzenia okiennego o numerze E. Wynikową wartością jest liczba typu Uint16 z ustawionym bitem o odpowiednim numerze lub 0, jeśli nie wykryto zdarzenia. Wywołuje: (WindowEvent&(1<<E))
W miejsce E najlepiej podać nazwę odpowiedniej stałej zdefiniowaną w SDL. Możliwe zdarzenia okienne:
https://www.eduinf.waw.pl/inf/prg/011_sdl2/1133.php
Przykład:
#include "BasicSDL.h"
STRING znak=" ";
STRING napis;
MAIN
SDLOpen(0)
Repeat
Cls
GetEvents
If (InKey>0 AND InKey<128)
znak[0]=InKey;
Add$(napis,znak)
EndIf
GPrintAt(0,0,napis)
ShowPage
Print MouseX _ MouseY _ MouseK NL
Until (Quit OR InKey(SDL_SCANCODE_ESCAPE))
if(WindowEvent(SDL_WINDOWEVENT_CLOSE)) {Print$ "ZAMKNIETO OKNO" NL}
SDLQuit
ENDMAIN