Introducere mouse și tastatură în Gosu

Jocurile sunt, prin definiție, interactive. Gosu face această interacțiune simplă cu o interfață simplă pentru detectarea și reacționarea la apăsarea tastelor și a butonului mouse-ului.

Există două moduri principale de a gestiona intrarea în programul dvs. Prima este o abordare orientată spre evenimente. La apăsarea butoanelor, programele dvs. primesc un eveniment și puteți reacționa în consecință. Al doilea este să verificați dacă, la momentul actualizării, este apăsat un anumit buton. Ambele tehnici sunt perfect valabile, folosiți oricare dintre dvs. vi se potrivește cel mai bine.

În spatele scenei, butoanele sunt reprezentate de numere întregi. Aceste coduri întregi depind de platformă și probabil nu ar trebui să își găsească calea în codul jocului. Pentru a rezuma acest aspect, Gosu oferă o serie de constante de utilizat.

Pentru fiecare tastă de tastatură, există un Gosu:: Kb * constant. Pentru majoritatea tastelor, numele acestor constante sunt ușor de ghicit. De exemplu, tastele săgeată sunt

instagram viewer
Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp și Gosu:: KbDown. Pentru o listă completă, consultați secțiunea documentație pentru modulul Gosu.

Evenimentele de intrare sunt livrate către Gosu:: Fereastră instanță. În bucla principală, înainte Actualizați este numit, Gosu va livra evenimente pentru toate butoanele care au fost fie apăsate, fie eliberate. Face acest lucru apelând la button_down și Butonul sus metode, trecând id-ul tastei sau butonul apăsat.

În button_down și Butonul sus metode, găsiți adesea a caz afirmație. Aceasta, pe lângă faptul că este foarte funcțională, oferă un mod foarte elegant și expresiv de a decide ce să facă în funcție de ce buton a fost apăsat sau eliberat. Următorul este un scurt exemplu de ceea ce a button_down metoda poate arata ca. Ar trebui să fie plasat în dvs. Gosu:: Fereastră subclase și va închide fereastra (încheierea programului) atunci când evadare tasta este apăsată.

Ușor, nu? Să extindem asta. Aici este Jucător clasă. Se poate deplasa la stânga și la dreapta dacă sunt apăsate tastele din stânga și din dreapta. Rețineți că această clasă are și ea button_down și Butonul sus metode. Ele funcționează la fel ca metodele de la a Gosu:: Fereastră subclasă. Gosu nu știe nimic Jucător cu toate acestea, vom apela la Jucătormetodele manual din Gosu:: Fereastrămetodele. Se poate găsi un exemplu complet și plin aici.

Dacă intrarea bazată pe evenimente nu este stilul dvs., puteți interoga orice Gosu:: Fereastră pentru a vedea dacă este apăsat vreun buton sau o tastă în orice moment. Puteți ignora button_down și Butonul sus apeluri în întregime.

Pentru a interoga Gosu:: Fereastră pentru a vedea dacă se apasă o tastă, apelați button_down? metoda cu id-ul butonului pe care doriți să îl verificați. Nu uitați semnul de întrebare din acest apel! Dacă sună button_down (Gosu:: KbLeft), tu vei fi raportare un buton apasă pe butonul Gosu:: Fereastră subclasă. Chiar dacă nu aveți nicio metodă de apelare definită, clasa părinte, Gosu:: Fereastră voi. Nu va fi nicio eroare, pur și simplu nu va funcționa așa cum vă așteptați. Doar nu uita acest semn de întrebare!

Aici este Jucător clasa rescrisă pentru utilizare button_down? în loc de evenimente. Este disponibil un exemplu complet și plin aici. De data aceasta, introducerea este verificată la începutul Actualizați metodă. Veți observa, de asemenea, că acest exemplu este mai scurt, dar, după părerea mea, mai puțin elegant.

Butoanele mouse-ului sunt gestionate în același mod cu butoanele tastaturii și gamepadului. Aveți posibilitatea să le interogați button_down? și evenimente cu button_down și Butonul sus. Cu toate acestea, mișcarea mouse-ului poate fi solicitată doar, nu există evenimente pentru mișcarea mouse-ului. Gosu:: Fereastră„s mouse_x și mouse_y metodele furnizează coordonatele X și Y ale indicelui mouse-ului.

Rețineți că coordonatele X și Y sunt relative la fereastra jocului. Deci, de exemplu, dacă mouse-ul este în colțul din stânga sus, acesta va fi aproape de coordonată (0,0). De asemenea, dacă indicatorul mouse-ului este in afara din fereastra de joc în întregime, va raporta în continuare unde indicatorul este relativ la fereastră. Deci ambele mouse_x și mouse_y poate fi mai mic decât zero și mai mult decât lățimea sau înălțimea ferestrei.

Următorul program va afișa un nou sprite oriunde faceți clic pe mouse. Rețineți că utilizează atât intrarea bazată pe eveniment (pentru clicuri), cât și intrarea bazată pe interogare (pentru a obține poziția mouse-ului). Un fișier complet, care poate fi rulat este disponibil aici.