Mängud on oma olemuselt interaktiivsed. Gosu muudab selle interaktsiooni lihtsaks liidese abil klahvide ja hiirenuppude tuvastamiseks ja neile reageerimiseks.
Teie programmis on sisendi haldamiseks kaks peamist viisi. Esimene neist on sündmustele suunatud lähenemine. Nuppude vajutamisel võtab teie programm vastu sündmuse ja saate sellele reageerida. Teine on kontrollida, kas värskendamise ajal on teatud nuppu vajutatud. Mõlemad tehnikad on täiesti kehtivad, kasutage seda, mis teile kõige paremini sobib.
Stseenide taga on nuppe tähistatud täisarvudega. Need täisarvukoodid sõltuvad platvormist ja tõenäoliselt ei peaks need teie mängukoodi leidma. Selle eemaldamiseks pakub Gosu mitmeid konstante, mida kasutada.
Iga klaviatuuri klahvi jaoks on Gosu:: Kb * pidev. Enamiku klahvide puhul on nende konstantide nimed hõlpsasti ära arvatavad. Näiteks on nooleklahvid Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp ja Gosu:: KbDown. Täieliku loetelu leiate Gosu mooduli dokumentatsioon.
Sisestussündmused edastatakse
Gosu:: aken näiteks. Põhisilmus enne värskendus kutsutakse, Gosu edastab sündmused kõigi nuppude jaoks, mida on kas vajutatud või vabastatud. Ta teeb seda, helistades nupp alla ja nupp meetodid, klahvi või nupu ID möödumine.in nupp alla ja nupp meetodeid, leiate sageli a juhtum avaldus. Lisaks funktsionaalsusele on see väga elegantne ja väljendusrikas viis otsustamaks, mida teha vastavalt sellele, millist nuppu vajutati või vabastati. Järgnev on lühike näide sellest, mida a nupp alla meetod võib välja näha. See tuleks asetada teie Gosu:: aken alamklassi ja sulgeb akna (programmi lõpetades), kui põgeneda klahvi vajutatakse.
Lihtne, eks? Laiendame seda. Siin on a Mängija klass. Vasaku ja parema klahvi vajutamisel saab see liikuda vasakule ja paremale. Pange tähele, et ka sellel klassil on nupp alla ja nupp meetodid. Nad töötavad täpselt nagu meetodid alates a-st Gosu:: aken alaklass. Gosu ei tea midagi Mängija helistame siiski Mängijameetodid käsitsi Gosu:: akenmeetodid. Siit leiate täieliku käivitatava näite siin.
Kui sündmusepõhine sisend ei ole teie stiil, võite päringuid teha ükskõik millise kohta Gosu:: aken ükskõik millise nupu või klahvi vajutamise igal ajal. Võite ignoreerida nupp alla ja nupp tagasihelistamine täielikult.
Päringu saamiseks Gosu:: aken Kui soovite klahvi vajutada, helistage numbrile nupp alla? selle nupu ID-ga, mida soovite kontrollida. Ärge unustage selles kõnes küsimärki! Kui helistate nupp alla (Gosu:: KbLeft), sa oled aruandlus nuppu vajutades nupule Gosu:: aken alaklass. Isegi kui teil pole ühtegi tagasihelistamise meetodit määratletud, Gosu:: aken tahe. Viga ei teki, see lihtsalt ei tööta nii, nagu loodate. Lihtsalt ärge unustage seda küsimärki!
Siin on Mängija klass ümber kirjutatud kasutamiseks nupp alla? sündmuste asemel. Saadaval on täielik käivitatav näide siin. Seekord kontrollitakse sisendit programmi alguses värskendus meetod. Samuti märkate, et see näide on lühem, kuid minu arvates vähem elegantne.
Hiirenuppe käsitletakse samamoodi nagu klaviatuuri ja mängupuldi nuppe. Võite mõlemalt neist päringuid teha nupp alla? ja sündmused koos nupp alla ja nupp. Hiire liigutamisest võib siiski ainult küsida, hiire liikumisel pole ühtegi sündmust. Gosu:: aken's hiire_x ja hiir_ meetodid pakuvad hiirekursori X- ja Y-koordinaate.
Pange tähele, et X- ja Y-koordinaadid on mänguakna suhtes. Näiteks kui hiir asub vasakus ülanurgas, asub see koordinaadi lähedal (0,0). Samuti siis, kui hiirekursor on väljas mänguakna terves osas, teatab see ikkagi, kus kursor on akna suhtes. Nii et mõlemad hiire_x ja hiir_ võib olla väiksem kui null ja üle akna laiuse või kõrguse.
Järgmine programm kuvab uue sprite kõikjal, kus hiireklõpsuga klõpsate. Pange tähele, et see kasutab nii sündmusepõhist sisestust (klikkide jaoks) kui ka päringupõhist sisestust (hiire asukoha saamiseks). Saadaval on täielik käivitatav fail siin.