Наверное одна из самых замороченных, на первый взгляд тем — работа с кнопками управления. Клавиатура, мышка, джойстики.
Для работы с управлением , будь то кнопки клавиатуры , или мышки, есть функция _input(event).
Внутри неё мы проверяем, что нажал пользователь, и уже делаем с этими данными всё что нам нужно.
Но прежде чем мы начнем изучать непосредственно код, стОит упомянуть, что инпут так же можно использовать в функции _process. Например если нам надо производить какие то манипуляции с объектом с постоянно нажатой кнопкой мышки или клавиатуры. Но, об этом чуть позже.
Посмотреть на текущую раскладку кнопок можно в настройках проекта — Project > Project Settings > Input Map.
По умолчанию в годо уже расписаны некоторые кнопки , например стрелочки, enter , home, page_up, page_down и прочие.
Я добавил новую кнопку «clicker», это нажатие на левую кнопку мышки.
Итак, давайте разберемся как отслеживается нажатие кнопки. Будем ловить клик мышкой.
Для этого в функции func _input(event): пишем код :
if Input.is_action_pressed("clicker"):
print("click")
Когда мы пишем is_action_pressed, годо сам выдаст нам все доступные кнопки из раскладки. И нам надо будет просто выбрать необходимую из списка.
Запускаем, жмем по левой кнопке мышки и видим результат :
Когда вы писали код, вы могли заметить, что годо помимо is_action_pressed предлагает нам is_action_just_pressed и is_action_just_released.
is_action_pressed — повторяет действие пока мышка зажата
is_action_just_pressed — действие происходит единажды по нажатию кнопки
is_action_just_released — действие происходит единажды по отпусканию кнопки
Резонный вопрос — почему наше действие не повторяется ?
Всё потому, что в таком случае нам надо вынести инпут в _process. Только там наш код будет обрабатываться постоянно.
Ловим кнопки которых нет в настройках приложения
Что делать, если мы хотим отлавливать кнопки мышки без добавления их в раскладку ?
Тут нет ничего сложного.
Пишем следующий код :
if InputEventMouseButton and event.is_pressed() and event.button_index == BUTTON_LEFT:
В этой строке происходит следующее : Идет проверка на нажатие кнопки мышки и проверка на то, что нажата именно левая кнопка.
Если мы не уточним последний пункт, то код будет срабатывать на нажатие ЛЮБОЙ кнопки мышки.
Если мы не укажем событие is_pressed, то будет отлавливаться как клик так и отпускание кнопки мышки.
Стоит отметить , что данный код не будет работать в функции _process, так как будет требовать аргумент event. Поэтому в _process как правило используется написание кода без участия event.
Например
if Input.is_mouse_button_pressed(BUTTON_LEFT):
или if Input.is_action_pressed("clicker"):
Отловить нажатие определенной кнопки клавиатуры так же не составляет труда.
Пишем — if Input.is_key_pressed():
В скобочках нам надо указать либо кнопку (в виде KEY_name), либо код кнопки, который можно подсмотреть в справке к годо. Например код 16777221 это нажатие на кнопку Enter. (она же KEY_ENTER)
Если же вам надо отлавливать нажатие любой кнопки клавиатуры, то можно написать следующий код :
if InputEventKey and event.is_pressed():
Как видим годо дает нам очень много вариантов работы с управлением. Главное тут не увязнуть :)