Gry są z definicji interaktywne. Gosu upraszcza tę interakcję dzięki prostemu interfejsowi do wykrywania i reagowania na naciśnięcia klawiszy i myszy.
Istnieją dwa podstawowe sposoby obsługi danych wejściowych w programie. Pierwszym z nich jest podejście zorientowane na wydarzenie. Po naciśnięciu przycisków twoje programy otrzymują zdarzenie i możesz odpowiednio zareagować. Drugim jest sprawdzenie, czy w momencie aktualizacji naciśnięty jest określony przycisk. Obie techniki są całkowicie poprawne, użyj tej, która najbardziej Ci odpowiada.
Za kulisami przyciski są reprezentowane przez liczby całkowite. Te kody całkowite są zależne od platformy i prawdopodobnie nie powinny znaleźć się w kodzie gry. Aby to streścić, Gosu udostępnia szereg stałych do użycia.
Dla każdego klawisza klawiatury jest Gosu:: Kb * stały. W przypadku większości kluczy nazwy tych stałych są łatwe do odgadnięcia. Na przykład klawisze strzałek to Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp i Gosu:: KbDown. Aby uzyskać pełną listę, zobacz dokumentacja modułu Gosu.
Zdarzenia wejściowe są dostarczane do Gosu:: Window instancja. W głównej pętli wcześniej aktualizacja nazywa się, Gosu będzie dostarczać zdarzenia dla wszystkich przycisków, które zostały naciśnięte lub zwolnione. Robi to poprzez wywołanie button_down i zapiąć metody, przekazując identyfikator naciśniętego klawisza lub przycisku.
w button_down i zapiąć metody, często można znaleźć walizka komunikat. To, oprócz tego, że jest bardzo funkcjonalne, zapewnia bardzo elegancki i wyrazisty sposób decydowania o tym, co robić w zależności od tego, który przycisk został naciśnięty lub zwolniony. Poniżej znajduje się krótki przykład tego, co button_down metoda może wyglądać. Powinien zostać umieszczony w twoim Gosu:: Window podklasę i zamknie okno (kończąc program), gdy ucieczka klawisz jest wciśnięty.
Łatwe, prawda? Rozwińmy to. Tutaj jest Gracz klasa. Można go przesuwać w lewo i prawo, jeśli naciśnięto lewy i prawy klawisz. Zauważ, że ta klasa również ma button_down i zapiąć metody Działają podobnie jak metody z Gosu:: Window podklasa. Gosu nic nie wie Gracz jednak będziemy dzwonić na Graczmetody ręcznie z Gosu:: Windowmetody. Pełny, działający przykład można znaleźć tutaj.
Jeśli dane wejściowe oparte na zdarzeniach nie są w twoim stylu, możesz wykonać zapytanie do dowolnego Gosu:: Window aby sprawdzić, czy w dowolnym momencie zostanie naciśnięty dowolny przycisk lub klawisz. Możesz zignorować button_down i zapiąć oddzwanianie całkowicie.
Aby wykonać zapytanie Gosu:: Window aby sprawdzić, czy klawisz został naciśnięty, zadzwoń pod numer button_down? metoda z identyfikatorem przycisku, który chcesz sprawdzić. Nie zapomnij znaku zapytania w tej rozmowie! Jeśli zadzwonisz button_down (Gosu:: KbLeft), będziesz raportowanie naciśnij przycisk do Gosu:: Window podklasa. Nawet jeśli nie zdefiniowano żadnych metod wywołania zwrotnego, klasa nadrzędna, Gosu:: Window Wola. Nie będzie błędu, po prostu nie będzie działać zgodnie z oczekiwaniami. Tylko nie zapomnij tego znaku zapytania!
Tutaj jest Gracz klasa przepisana do użycia button_down? zamiast wydarzeń. Dostępny jest pełny przykład, który można uruchomić tutaj. Tym razem wejście jest sprawdzane na początku aktualizacja metoda. Zauważysz również, że ten przykład jest krótszy, ale moim zdaniem mniej elegancki.
Przyciski myszy są obsługiwane w taki sam sposób, jak przyciski klawiatury i gamepada. Możesz zarówno zapytać ich za pomocą button_down? i wydarzenia z button_down i zapiąć. Jednak ruchy myszy mogą być tylko pytane, nie ma zdarzeń dotyczących ruchu myszy. Gosu:: Window„s mouse_x i mysi metody zapewniają współrzędne X i Y wskaźnika myszy.
Zauważ, że współrzędne X i Y odnoszą się do okna gry. Na przykład, jeśli mysz znajduje się w lewym górnym rogu, znajdzie się w pobliżu współrzędnej (0,0). Ponadto, jeśli wskaźnik myszy to na zewnątrz całkowicie z okna gry, nadal będzie raportować, gdzie wskaźnik jest względem okna. Więc oba mouse_x i mysi może być mniejsza niż zero i większa niż szerokość lub wysokość okna.
Poniższy program wyświetli nową ikonkę gdziekolwiek klikniesz myszą. Zauważ, że używa zarówno danych wejściowych opartych na zdarzeniach (dla kliknięć), jak i danych wejściowych opartych na zapytaniach (w celu uzyskania pozycji myszy). Dostępny jest pełny plik, który można uruchomić tutaj.