Indtastning af mus og tastatur i Gosu

click fraud protection

Spil er pr. Definition interaktive. Gosu gør denne interaktion ligetil med en simpel grænseflade til at opdage og reagere på tast- og museknappres.

Der er to primære måder at håndtere input i dit program. Den første er en begivenhedsorienteret tilgang. Når der trykkes på knapper, modtager dine programmer en begivenhed, og du kan reagere i overensstemmelse hermed. Det andet er at kontrollere, om der ved en opdatering trykkes på en bestemt knap. Begge teknikker er perfekt gyldige, brug alt efter hvad der passer bedst til dig.

Bag kulisserne er knapper repræsenteret af heltal. Disse heltalskoder er platformafhængige og burde sandsynligvis ikke finde vej til dit spilkode. For at abstrahere dette væk giver Gosu et antal konstanter til brug.

For hver tastaturtast er der en Gosu:: Kb * konstant. For de fleste af nøglerne er nemt at gætte navnene på disse konstanter. For eksempel er piletasterne Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp og Gosu:: KbDown. For en komplet liste, se dokumentation til Gosu-modulet.

instagram viewer

Inputbegivenheder leveres til Gosu:: Vindue instans. I hovedsløjfen før opdatering kaldes, vil Gosu levere begivenheder for alle knapper, der enten er blevet trykket eller frigivet. Det gør dette ved at kalde button_down og knap op metoder, passering af id på tasten eller knappen, der er trykket på.

I button_down og knap op metoder, finder du ofte en sag udmelding. Dette udover at være meget funktion giver en meget elegant og udtryksfuld måde at beslutte, hvad man skal gøre afhængigt af hvilken knap der blev trykket på eller frigivet. Det følgende er et kort eksempel på, hvad a button_down metoden kan se ud. Det skal placeres i dit Gosu:: Vindue underklasse, og lukker vinduet (afslutter programmet), når flugt tasten trykkes på.

Let, ikke? Lad os udvide dette. Her er en Spiller klasse. Det kan flytte til venstre og højre, hvis der trykkes på venstre og højre taster. Bemærk, at denne klasse også har button_down og knap op metoder. De fungerer ligesom metoderne fra a Gosu:: Vindue underklasse. Gosu ved ikke noget om Spiller dog ringer vi til Spiller's metoder manuelt fra Gosu:: Vinduemetoder. Et fuldt, eksekverbart eksempel kan findes her.

Hvis begivenhedsbaseret input ikke er din stil, kan du spørge enhver Gosu:: Vindue for at se, om der trykkes på en knap eller knap på ethvert tidspunkt. Du kan ignorere button_down og knap op tilbagekald helt.

For at spørge Gosu:: Vindue for at se, om der trykkes på en tast, skal du ringe til button_down? metode med id på den knap, du gerne vil kontrollere. Glem ikke spørgsmålstegnet i dette opkald! Hvis du ringer button_down (Gosu:: KbLeft), det bliver du rapportering et tastetryk til Gosu:: Vindue underklasse. Selvom du ikke har defineret nogen tilbagekaldsmetoder, er overordnet klassen, Gosu:: Vindue vilje. Der vil ikke være nogen fejl, det fungerer bare ikke, som du forventer. Bare glem ikke det spørgsmålstegn!

Her er Spiller klasse omskrevet til brug button_down? i stedet for begivenheder. Et fuldt, eksekverbart eksempel er tilgængeligt her. Denne gang kontrolleres input for i begyndelsen af opdatering metode. Du vil også bemærke, at dette eksempel er kortere, men efter min mening mindre elegant.

Museknapperne håndteres på samme måde som tastatur- og gamepad-knapper. Du kan begge forespørge dem med button_down? og begivenheder med button_down og knap op. Musbevægelse kan dog kun spørges, der er ingen begivenheder for musbevægelse. Gosu:: Vindue's mouse_x og mouse_y metoder tilvejebringer X- og Y-koordinaterne for musemarkøren.

Bemærk, at X- og Y-koordinaterne er i forhold til spilvinduet. Så hvis musen for eksempel er i øverste venstre hjørne, vil den være i nærheden af ​​koordinaten (0,0). Også, hvis musemarkøren er uden for af spilvinduet helt, rapporterer det stadig, hvor markøren er i forhold til vinduet. Så begge dele mouse_x og mouse_y kan være mindre end nul og mere end bredden eller højden på vinduet.

Følgende program viser en ny sprite, uanset hvor du klikker på musen. Bemærk, at det bruger både begivenhedsdrevet input (til klik) og forespørgselsdrevet input (for at få musens position). En fuld, kørbar fil er tilgængelig her.

instagram story viewer