Мышь и ввод с клавиатуры в Gosu

Игры по определению являются интерактивными. Gosu делает это взаимодействие простым благодаря простому интерфейсу для обнаружения и реагирования на нажатия клавиш и кнопок мыши.

Есть два основных способа обработки ввода в вашей программе. Первый - это событийный подход. Когда кнопки нажаты, ваши программы получают событие, и вы можете реагировать соответственно. Второй - проверить, нажата ли определенная кнопка во время обновления. Обе методики совершенно верны, используйте тот, который вам больше подходит.

За кулисами кнопки представлены целыми числами. Эти целочисленные коды зависят от платформы и, вероятно, не должны попадать в код вашей игры. Чтобы абстрагироваться от этого, Gosu предоставляет несколько констант для использования.

Для каждой клавиши клавиатуры есть Gosu:: Kb * постоянная. Для большинства ключей имена этих констант легко угадываются. Например, клавиши со стрелками Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp и Gosu:: KbDown. Полный список см. В документация для модуля Gosu.

instagram viewer

Входные события доставляются в Gosu:: Окно экземпляр. В основном цикле, перед Обновить называется, Gosu будет доставлять события для всех кнопок, которые были нажаты или отпущены. Это делается путем вызова Кнопка вниз и кнопка вверх методы, передающие идентификатор нажатой клавиши или кнопки.

в Кнопка вниз и кнопка вверх методы, вы часто находите кейс заявление. Это, помимо функциональности, обеспечивает очень элегантный и выразительный способ решить, что делать в зависимости от того, какая кнопка была нажата или отпущена. Ниже приведен краткий пример того, что Кнопка вниз метод может выглядеть так. Это должно быть размещено в вашем Gosu:: Окно подкласс, и закроет окно (завершение программы), когда побег клавиша нажата.

Легко, правда? Давайте расширим это. Вот игрок учебный класс. Он может двигаться влево и вправо, если нажата левая и правая клавиши. Обратите внимание, что этот класс также имеет Кнопка вниз и кнопка вверх методы. Они работают так же, как методы из Gosu:: Окно подкласс. Госу ничего не знает о игрок хотя мы будем называть игрокметоды вручную из Gosu:: Окнометоды. Полный, работающий пример можно найти Вот.

Если ввод на основе событий не ваш стиль, вы можете запросить любой Gosu:: Окно чтобы увидеть, нажата ли какая-либо кнопка или кнопка, в любое время. Вы можете игнорировать Кнопка вниз и кнопка вверх Обратные вызовы полностью.

Чтобы запросить Gosu:: Окно чтобы увидеть, нажата ли клавиша, вызовите Кнопка вниз? метод с идентификатором кнопки, которую вы хотите проверить. Не забывайте вопросительный знак в этом звонке! Если вы позвоните button_down (Gosu:: KbLeft), ты будешь составление отчетов нажмите кнопку к Gosu:: Окно подкласс. Даже если у вас не определены методы обратного вызова, родительский класс, Gosu:: Окно будет. Там не будет никакой ошибки, это просто не будет работать, как вы ожидаете. Только не забудьте этот знак вопроса!

Здесь игрок класс переписан для использования Кнопка вниз? вместо событий. Полный, работающий пример доступен Вот. На этот раз вход проверяется в начале Обновить метод. Вы также заметите, что этот пример короче, но, на мой взгляд, менее элегантен.

Кнопки мыши обрабатываются так же, как кнопки клавиатуры и геймпада. Вы можете оба запросить их с Кнопка вниз? и события с Кнопка вниз и кнопка вверх. Тем не менее, движение мыши может быть только запрошено, нет никаких событий для движения мыши. Gosu:: Окно«s mouse_x и mouse_y методы предоставляют координаты X и Y указателя мыши.

Обратите внимание, что координаты X и Y относятся к окну игры. Так, например, если мышь находится в верхнем левом углу, она будет около координаты (0,0). Кроме того, если указатель мыши снаружи полностью окна игры, он все равно сообщит, где указатель относительно окна. Так что оба mouse_x и mouse_y может быть меньше нуля и больше ширины или высоты окна.

Следующая программа будет отображать новый спрайт, где бы вы ни щелкнули мышью. Обратите внимание, что он использует как управляемый событиями ввод (для кликов), так и ввод, управляемый запросом (чтобы получить положение мыши). Доступен полный исполняемый файл Вот.

instagram story viewer