Spel är per definition interaktiva. Gosu gör denna interaktion enkelt med ett enkelt gränssnitt för att upptäcka och reagera på knapp- och musknapptryckningar.
Det finns två huvudsakliga sätt att hantera input i ditt program. Den första är en händelsorienterad strategi. När du trycker på knapparna får dina program en händelse och du kan reagera därefter. Det andra är att kontrollera om en viss knapp trycks in vid en uppdatering. Båda teknikerna är helt giltiga, använd den som passar dig bäst.
Bakom kulisserna representeras knappar av heltal. Dessa heltalskoder är plattformsberoende och borde förmodligen inte hitta sin väg till din spelkod. För att abstrahera detta ger Gosu ett antal konstanter att använda.
För varje tangentbordsknapp finns det en Gosu:: Kb * konstant. För de flesta nycklar gissas namnen på dessa konstanter lätt. Till exempel är piltangenterna Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp och Gosu:: KbDown. För en fullständig lista, se dokumentation för Gosu-modulen.
Ingångshändelser levereras till
Gosu:: Fönster exempel. I huvudslingan före uppdatering kallas kommer Gosu att leverera händelser för alla knappar som antingen har tryckts eller släppts. Det gör detta genom att ringa button_down och knappen uppåt metoder, vidarebefordra id för knappen eller knappen som trycks in.I button_down och knappen uppåt metoder hittar du ofta en fall påstående. Detta, förutom att det är mycket funktion, ger ett mycket elegant och uttrycksfullt sätt att bestämma vad man ska göra beroende på vilken knapp som trycktes eller släpptes. Följande är ett kort exempel på vad a button_down metoden kan se ut. Den ska placeras i din Gosu:: Fönster underklass, och stänger fönstret (slutar programmet) när fly knappen trycks in.
Lätt, eller hur? Låt oss utöka detta. Här är en Spelare klass. Den kan flytta åt vänster och höger om vänster- och högerknapparna trycks in. Observera att den här klassen också har button_down och knappen uppåt metoder. De fungerar precis som metoderna från a Gosu:: Fönster underklass. Gosu vet inte något om Spelare men vi kommer att ringa Spelare: s metoder manuellt från Gosu:: Fönstermetoder. Ett fullständigt, körbart exempel kan hittas här.
Om händelsebaserad input inte är din stil kan du fråga vilken som helst Gosu:: Fönster för att se om någon knapp eller knapp trycks ned när som helst. Du kan ignorera button_down och knappen uppåt återuppringningar helt.
Att fråga Gosu:: Fönster för att se om du trycker på en knapp, ring button_down? metod med ID för knappen du vill kontrollera. Glöm inte frågetecknet i det här samtalet! Om du ringer button_down (Gosu:: KbLeft), du kommer vara rapportering en knapptryckning till Gosu:: Fönster underklass. Även om du inte har definierat några återuppringningsmetoder, är föräldraklassen, Gosu:: Fönster kommer. Det kommer inte att finnas något fel, det fungerar bara inte som du förväntar dig. Glöm bara det frågetecknet!
Här är Spelare klass omskrivna för att använda button_down? istället för händelser. Ett fullständigt, löpbart exempel är tillgängligt här. Den här gången kontrolleras ingången i början av uppdatering metod. Du kommer också att märka att det här exemplet är kortare men enligt min mening mindre elegant.
Musknapparna hanteras på samma sätt som tangentbord och gamepad-knappar. Du kan båda fråga dem med button_down? och händelser med button_down och knappen uppåt. Musrörelse kan dock bara fråges, det finns inga händelser för musrörelse. Gosu:: Fönster's mouse_x och mouse_y metoder tillhandahåller muspekarens X- och Y-koordinater.
Observera att X- och Y-koordinaterna är i förhållande till spelfönstret. Så om till exempel musen är i det övre vänstra hörnet kommer den att ligga nära koordinaten (0,0). Om muspekaren är det utanför i spelfönstret kommer den fortfarande att rapportera var pekaren är relativt fönstret. Så båda mouse_x och mouse_y kan vara mindre än noll och mer än fönstrets bredd eller höjd.
Följande program visar en ny sprite vart du än klickar på musen. Observera att den använder både händelsestyrd ingång (för klick) och frågestyrd ingång (för att få muspositionen). En fullständig, körbar fil är tillgänglig här.