Unos miša i tipkovnice u Gosu

Igre su, po definiciji, interaktivne. Gosu ovu interakciju čini jednostavnom, s jednostavnim sučeljem za otkrivanje i reagiranje na pritiske na tipke i miša.

Postoje dva osnovna načina za rukovanje ulaznim podacima u vašem programu. Prvi je pristup koji je orijentiran na događaje. Kada pritisnete gumbe, vaši programi primaju događaj i možete reagirati u skladu s tim. Drugo je provjera je li u vrijeme ažuriranja pritisnut određeni gumb. Obje su tehnike potpuno valjane i koristite ono što vam najbolje odgovara.

Iza kulisa gumbi su predstavljeni cijelim brojevima. Ti cjelobrojni kodovi ovise o platformi i vjerojatno ne bi trebali pronaći svoj put u kod za igru. Kako bi ovo apstrahirao, Gosu pruža brojne konstante koje treba upotrijebiti.

Za svaku tipku na tipkovnici postoji Gosu:: Kb * konstantno. Za većinu ključeva lako se pogodi imena tih konstanti. Na primjer, tipke sa strelicama su Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp i Gosu:: KbDown. Kompletni popis potražite na dokumentaciju za Gosu modul.

instagram viewer

Ulazni događaji se isporučuju Gosu:: Prozor primjer. U glavnoj petlji, prije Ažuriraj zove se, Gosu će dostaviti događaje za sve tipke koje su ili pritisnute ili otpuštene. To čini pozivom na button_down i Zakopčaj se metode, prosljeđujući id pritisnute tipke ili gumba.

U button_down i Zakopčaj se metoda, često možete naći a slučaj izjava. To, osim što je vrlo u funkciji, pruža vrlo elegantan i ekspresivan način odlučivanja što učiniti ovisno o tome koji je gumb pritisnut ili otpušten. Slijedi kratki primjer onoga što button_down metoda može izgledati. Treba ga smjestiti u svoj Gosu:: Prozor podrazred i zatvorit će prozor (završavajući program) kada pobjeći tipka je pritisnuta.

Lako, zar ne? Proširimo ovo. Evo a Igrač klase. Ako se pritisnete lijevu i desnu tipku, može se pomicati lijevo i desno. Imajte na umu da i ta klasa ima button_down i Zakopčaj se metode. Djeluju baš kao i metode iz Gosu:: Prozor podrazred. Gosu ništa ne zna Igrač ipak, nazvat ćemo Igračmetodama ručno iz Gosu:: Prozormetode. Primjer koji se može ispuniti može se naći ovdje.

Ako unos temeljen na događajima nije vaš stil, možete zatražiti bilo koji Gosu:: Prozor u bilo kojem trenutku vidjeti je li bilo koji gumb ili tipka pritisnut. Možete ignorirati button_down i Zakopčaj se povratni pozivi u cijelosti.

Za upit Gosu:: Prozor da biste vidjeli je li pritisnuta tipka, pozovite button_down? metodom s idom gumba koji želite provjeriti. Ne zaboravite upitnik u ovom pozivu! Ako nazovete button_down (Gosu:: KbLeft), bit ćeš izvještavanje pritisnite gumb za Gosu:: Prozor podrazred. Čak i ako nemate definirane metode povratnog poziva, roditeljska klasa, Gosu:: Prozor htjeti. Neće biti pogreške, jednostavno neće raditi kako očekujete. Samo ne zaboravite taj upitnik!

Ovdje je Igrač klasa prepisana za upotrebu button_down? umjesto događaja. Dostupan je cjelovit primjer za pokretanje ovdje. Ovaj put se provjerava na ulazu na početku Ažuriraj metoda. Primijetit ćete i da je ovaj primjer kraći, ali po mom mišljenju manje elegantan.

Tipkama miša rukuje se na isti način kao i tipkama tipkovnice i tipkovnice. Možete ih oboje pitati button_down? i događanja s button_down i Zakopčaj se. Međutim, kretanje miša može se postaviti samo upitom, za kretanje miša nema događaja. Gosu:: Prozor-ih mouse_x i plašljiv metode daju X i Y koordinate pokazivača miša.

Imajte na umu da su koordinate X i Y u odnosu na prozor igre. Na primjer, ako je miš u gornjem lijevom kutu, to će biti blizu koordinate (0,0). Također, ako je pokazivač miša izvan cijelog prozora igre i dalje će izvještavati gdje je pokazivač u odnosu na prozor. Dakle oboje mouse_x i plašljiv može biti manja od nule i veća od širine ili visine prozora.

Sljedeći će program prikazati novi sprite gdje god kliknete mišem. Imajte na umu da se koristi i ulaz usmjeren na događaje (za klikove), kao i upit vođen na upit (da bi se dobio položaj miša). Dostupna je cjelovita datoteka koju je moguće izvršavati ovdje.