Wprowadzanie myszy i klawiatury w Gosu





Gry są z definicji interaktywne. Gosu ułatwia tę interakcję dzięki prostemu interfejsowi do wykrywania i reagowania na naciśnięcia klawiszy i przycisków myszy.

Istnieją dwa podstawowe sposoby obsługi danych wejściowych w twoim programie. Pierwszy to podejście zorientowane na wydarzenia. Po naciśnięciu przycisków Twoje programy odbierają zdarzenie i możesz odpowiednio zareagować. Drugim jest sprawdzenie, czy w momencie aktualizacji został naciśnięty określony przycisk. Obie techniki są całkowicie trafne, użyj tej, która najbardziej Ci odpowiada.



Stałe klawisza i przycisku

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 wyabstrahować, Gosu udostępnia pewną liczbę stałych do wykorzystania.

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::KbPrawo , Gosu::KbUp oraz Gosu::KbDown . Aby zobaczyć pełną listę, zobacz dokumentacja modułu Gosu .



Istnieją również podobne stałe dla przycisków myszy. Będziesz głównie używać Gosu::Pani Lewa oraz Gosu::Pani Racja dla lewego i prawego kliknięcia. Istnieje również wsparcie dla gamepadów za pośrednictwem Gosu::Gp* stałe.

Ten artykuł jest częścią serii. Przeczytaj więcej artykułów o Rapid Game Prototyping w Ruby

Wejście zorientowane na zdarzenia

Zdarzenia wejściowe są dostarczane do Gosu::Okno instancja. W głównej pętli, przed aktualizacja jest wywoływana, Gosu dostarczy zdarzenia dla wszystkich przycisków, które zostały naciśnięte lub zwolnione. Robi to, dzwoniąc do button_down oraz zapiąć metody, przekazując identyfikator wciśniętego klawisza lub przycisku.

w button_down oraz zapiąć metody, często znajdujesz walizka oświadczenie. To, oprócz bardzo funkcjonalnej, zapewnia bardzo elegancki i wyrazisty sposób decydowania o tym, co zrobić 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 może wyglądać metoda. Powinien być umieszczony w twoim Gosu::Okno podklasę i zamknie okno (zakończy program), gdy ucieczka klawisz jest wciśnięty.



|_+_|

Łatwe, prawda? Rozwińmy to. Tutaj jest Gracz klasa. Może poruszać się w lewo iw prawo, jeśli zostanie naciśnięty lewy i prawy klawisz. Zauważ, że ta klasa ma również button_down oraz zapiąć metody. Działają tak samo jak metody z Gosu::Okno podklasa. Gosu nic o tym nie wie Gracz chociaż będziemy dzwonić do Gracz 's metody ręcznie z Gosu::Okno metody. Pełny, możliwy do uruchomienia przykład można znaleźć tutaj .

|_+_|

Ten artykuł jest częścią serii. Przeczytaj więcej artykułów o Rapid Game Prototyping w Ruby



Zapytanie o dane wejściowe

Jeśli dane wejściowe oparte na zdarzeniach nie są w Twoim stylu, możesz zapytać o dowolne Gosu::Okno aby sprawdzić, czy w dowolnym momencie został naciśnięty dowolny przycisk lub klawisz. Możesz zignorować button_down oraz zapiąć wywołania zwrotne całkowicie.

Aby zapytać o Gosu::Okno aby sprawdzić, czy klawisz jest naciśnięty, zadzwoń pod numer button_down? metoda z identyfikatorem przycisku, który chcesz sprawdzić. Nie zapomnij o znaku zapytania w tej rozmowie! Jeśli zadzwonisz button_down(Gosu::KbLeft) , będziesz raportowanie przycisk naciśnij, aby Gosu::Okno podklasa. Nawet jeśli nie masz zdefiniowanych żadnych metod wywołań zwrotnych, klasa nadrzędna, Gosu::Okno będzie. 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żytku button_down? zamiast wydarzeń. Dostępny jest pełny, możliwy do uruchomienia przykład tutaj . Tym razem dane wejściowe są sprawdzane na początku aktualizacja metoda. Zauważysz też, że ten przykład jest krótszy, ale moim zdaniem mniej elegancki.

|_+_|

Ten artykuł jest częścią serii. Przeczytaj więcej artykułów o Rapid Game Prototyping w Ruby



Wprowadzanie myszy

Przyciski myszy obsługiwane są w taki sam sposób, jak przyciski klawiatury i gamepada. Możesz zapytać o nie za pomocą button_down? i wydarzenia z button_down oraz zapiąć . Jednak ruch myszy może być tylko odpytywany, nie ma zdarzeń związanych z ruchem myszy. Gosu::Okno 's mysz_x oraz mysi metody dostarczają 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, będzie blisko współrzędnej (0.0) . Ponadto, jeśli wskaźnik myszy jest poza całego okna gry, nadal będzie raportować, gdzie wskaźnik znajduje się w stosunku do okna. Więc oba mysz_x oraz mysi może być mniejsza niż zero i większa niż szerokość lub wysokość okna.

Poniższy program wyświetli nowego duszka po kliknięciu myszą. Zauważ, że wykorzystuje zarówno dane wejściowe sterowane zdarzeniami (dla kliknięć), jak i dane wejściowe sterowane zapytaniem (aby uzyskać pozycję myszy). Dostępny jest pełny, możliwy do uruchomienia plik tutaj .

|_+_|