По дефиниция игрите са интерактивни. Gosu прави това взаимодействие направо с опростен интерфейс за откриване и реагиране на натискания на клавиши и мишки.
Има два основни начина за справяне с въвеждането във вашата програма. Първият е подход, ориентиран към събитията. Когато бутоните бъдат натиснати, вашите програми получават събитие и можете да реагирате съответно. Второто е да проверите дали по време на актуализация е натиснат определен бутон. И двете техники са напълно валидни, използвайте който и да ви подхожда най-добре.
Зад кулисите бутоните са представени от цели числа. Тези цели числа са зависими от платформата и вероятно не трябва да намерят своя път в кода на играта ви. За да абстрахира това, Gosu предоставя няколко константи, които да използва.
За всеки клавишен клавиш има а Gosu:: Kb * константа. За повечето ключове имената на тези константи лесно се гадаят. Например клавишите със стрелки са Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp и Gosu:: KbDown. За пълен списък вижте документация за модула Gosu.
Входните събития се доставят на Gosu:: Прозорец инстанция. В основния цикъл, преди актуализация се обажда, Gosu ще достави събития за всички бутони, които или са били натиснати или освободени. Това прави, като се обади на button_down и закопчавам методи, предаване на идентификационния номер на натиснатия бутон или бутон.
В button_down и закопчавам методи, често намирате a случай изявление. Това, освен че е много функционално, осигурява много елегантен и изразителен начин да решите какво да правите в зависимост от това кой бутон е бил натиснат или освободен. По-долу е кратък пример за това какво button_down метод може да изглежда. Тя трябва да бъде поставена във вашия Gosu:: Прозорец подклас и ще затвори прозореца (завършващ програмата), когато избяга натиска се клавиш.
Лесно, нали? Нека разширим това. Ето едно плейър клас. Той може да се движи наляво и надясно, ако се натиснат левия и десния бутон. Имайте предвид, че този клас също има button_down и закопчавам методи. Те работят точно като методите от a Gosu:: Прозорец подклас. Госу не знае нищо плейър все пак, ще се обаждаме на плейърметоди ръчно от Gosu:: Прозорецметоди. Пълен пример за изпълнение тук.
Ако въвеждането на базата на събития не е вашият стил, можете да зададете заявка за всеки Gosu:: Прозорец за да видите дали някой бутон или клавиш е натиснат, по всяко време. Можете да игнорирате button_down и закопчавам отстъпки изцяло.
За да поискате Gosu:: Прозорец за да видите дали е натиснат клавиш, обадете се на button_down? метод с идентификатора на бутона, който искате да проверите. Не забравяйте въпросния знак в този разговор! Ако се обадите button_down (Gosu:: KbLeft), Ти ще си докладване натиснете бутон към Gosu:: Прозорец подклас. Дори и да нямате дефинирани методи за обратно извикване, родителският клас, Gosu:: Прозорец ще. Няма да има грешка, просто няма да работи както очаквате. Просто не забравяйте този въпрос!
Тук е плейър клас, пренаписана за използване button_down? вместо събития. Наличен е пълен пример за изпълнение тук. Този път входът се проверява в началото на актуализация метод. Ще забележите също, че този пример е по-къс, но според мен не толкова елегантен.
Бутоните на мишката се управляват по същия начин като бутоните за клавиатура и геймпад. Можете да ги запитате и двамата button_down? и събития с button_down и закопчавам. Въпреки това движението на мишката може да се запитва само, няма събития за движение на мишката. Gosu:: Прозорец'с mouse_x и mouse_y методите осигуряват X и Y координатите на показалеца на мишката.
Обърнете внимание, че координатите X и Y са относителни към прозореца на играта. Така например, ако мишката е в горния ляв ъгъл, тя ще бъде близо до координатата (0,0). Също така, ако показалеца на мишката е извън на прозореца на играта изцяло, той ще отчита къде показалеца е относително към прозореца. Значи и двете mouse_x и mouse_y може да бъде по-малко от нула и повече от ширината или височината на прозореца.
Следващата програма ще покаже нов спрайт, където и да щракнете с мишката. Обърнете внимание, че той използва както вход, управляван от събития (за кликванията), така и въвеждане на заявки (за да получи позицията на мишката). Наличен е пълен, изпълним файл тук.