Egér- és billentyűzetbemenet Gosu-ban

A játékok definíció szerint interaktívak. A Gosu ezt az interakciót egyszerűvé teszi egy egyszerű felülettel, amellyel észlelheti és reagálhat a gombok és az egérgombok megnyomására.

Két alapvető módszer van a bemenet kezelésére a programban. Az első egy eseményorientált megközelítés. A gombok megnyomásakor a program eseményt kap, és ennek megfelelően reagálhat. A második annak ellenőrzése, hogy a frissítés idején megnyomtak-e egy bizonyos gombot. Mindkét technika tökéletesen érvényes, használja azt, amelyik a legjobban megfelel.

A színfalak mögött a gombokat egész számok képviselik. Ezek az egész kódok platformfüggőek, és valószínűleg nem találják meg az utat a játék kódjába. Ennek eloszlatása érdekében Gosu számos állandóságot nyújt.

Minden billentyűzethez van egy Gosu:: Kb * állandó. A legtöbb billentyűnél ezeknek az állandóknak a neve könnyen kitalálható. Például a nyílbillentyűk Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp és Gosu:: KbDown. A teljes listát lásd a a Gosu modul dokumentációja.

instagram viewer

A bemeneti eseményeket a rendszer továbbítja Gosu:: Ablak példa. A fő hurokban, előtte frissítés hívják, a Gosu eseményeket szállít minden olyan gombra, amelyet megnyomtak vagy elengedtek. Ezt úgy csinálja, hogy felhívja a button_down és button_up módszerek, a gomb vagy a gomb azonosítójának átadása.

Ban,-ben button_down és button_up módszerek, gyakran talál egy ügy nyilatkozat. Ez amellett, hogy nagyon funkcionális, nagyon elegáns és kifejező módon dönti el, hogy mit tegyen, attól függően, hogy melyik gombot nyomta meg vagy engedte el. Az alábbiakban bemutatjuk egy rövid példát erre: button_down A módszer úgy néz ki, mint a. Helyezze a saját Gosu:: Ablak alosztályt, és bezárja az ablakot (a program befejezésével), amikor a menekülni gomb megnyomása.

Könnyű, igaz? Bővítsük ezt. Itt van egy Játékos osztály. Balra és jobbra mozgathat, ha megnyomja a bal és a jobb gombot. Vegye figyelembe, hogy ennek az osztálynak is van button_down és button_up mód. Úgy működnek, mint az a. Módszer Gosu:: Ablak alosztálya. Gosu nem tud semmit Játékos hívjuk azonban a Játékosmódszerei manuálisan a Gosu:: Ablakmódszerei. Teljes, futtatható példa található itt.

Ha az eseményalapú bemenet nem az Ön stílusa, akkor bármilyen kérdést megtehet Gosu:: Ablak bármikor megnézheti, nyom-e valamelyik gombot vagy gombot. Nem veheti figyelembe button_down és button_up teljes visszahívás.

A lekérdezés a Gosu:: Ablak hívja fel a gombot button_down? módszer az ellenőrizni kívánt gomb azonosítójával. Ne felejtsd el a hívás kérdőjelét! Ha hívsz button_down (Gosu:: KbLeft), te leszel jelentés egy gombnyomás a Gosu:: Ablak alosztálya. Még akkor sem, ha nincs meghatározva visszahívási módszer, a szülőosztály, Gosu:: Ablak akarat. Nem lesz hiba, egyszerűen nem fog működni, ahogy vártad. Csak ne felejtsd el ezt a kérdőjelet!

Itt van Játékos osztály újraírva használatához button_down? események helyett. Teljes, futtatható példa érhető el itt. Ezúttal a bemenet ellenőrzése a frissítés eljárás. Azt is észreveszi, hogy ez a példa rövidebb, de véleményem szerint kevésbé elegáns.

Az egérgombokat ugyanúgy kell kezelni, mint a billentyűzetet és a játékgombot. Mindkettővel lekérdezheti őket button_down? és események a button_down és button_up. Az egér mozgását azonban csak kérdezni lehet, az egér mozgására nincs esemény. Gosu:: Ablak„s mouse_x és mouse_y A módszerek biztosítják az egérmutató X és Y koordinátáit.

Vegye figyelembe, hogy az X és Y koordináták a játék ablakához viszonyítva vannak. Tehát például, ha az egér a bal felső sarokban van, akkor a koordináta közelében lesz (0,0). Ezenkívül, ha az egérmutató is kívül A játék ablaka teljes egészében, akkor továbbra is jelenteni fogja, hogy a mutató hol van az ablakhoz képest. Tehát mindkettő mouse_x és mouse_y lehet kisebb, mint nulla, és nagyobb, mint az ablak szélessége vagy magassága.

A következő program új sorozatot jelenít meg, bárhová is kattint az egérrel. Vegye figyelembe, hogy az eseményvezérelt bemenetet (a kattintásokhoz) és a lekérdezésvezérelt bemenetet (az egér helyzetének meghatározásához) egyaránt használja. Teljes, futtatható fájl érhető el itt.

instagram story viewer