Godot Keyboard Events

Я изучаю Godot Engine и GDScript, и я искал в интернете информацию о событиях клавиатуры, но я не понял. Есть ли что-то в Годо, как: on_key_down("keycode")?

7 ответов

Решение

Вы можете использовать InputEvent для проверки конкретных ключей.

Ознакомьтесь с документацией: http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html

Версии Godot 3.0 и выше имеют новые функции опроса ввода, которые можно использовать в любом месте ваших сценариев:

  • Input.is_action_pressed(action) - проверяет, нажимается ли действие
  • Input.is_action_just_pressed(action) - проверяет, было ли нажато действие
  • Input.is_action_released(action) - проверяет, было ли действие только что выпущено

Там нет официальной опции OnKeyUp, но вы можете использовать _input(event) функция для получения ввода при нажатии / отпускании действия:

func _input(event):

    if event.is_action_pressed("my_action"):
        # Your code here
    elif event.is_action_released("my_action):
        # Your code here

Действия задаются в "Настройки проекта"> "Карта ввода".

Конечно, вы не всегда хотите использовать _input, а лучше получить входные данные в рамках фиксированных обновлений. Ты можешь использовать Input.is_key_pressed() но нет is_key_released(), В этом случае вы можете сделать это:

var was_pressed = 0

func _fixed_process(delta):
    if !Input.is_key_pressed() && was_pressed = 1:
        # Your key is NOT pressed but WAS pressed 1 frame before
        # Code to be executed

    # The rest is just checking whether your key is just pressed
    if Input.is_key_pressed():
        was_pressed = 1
    elif !Input.is_key_pressed():
        was_pressed = 0

Это то, что я использовал. Не стесняйтесь сообщить мне, если есть лучший способ сделать OnKeyUp в Годо.

Нажмите «Настройки проекта» на панели инструментов, перейдите к карте ввода, а затем вы можете назвать действие и добавить к нему любую клавишу, мышь или джойстик. В коде используется:

      if Input.is_action_just_pressed('Your action name'):
   print('Pressed!')

где кнопка настроек проекта

В godot нет функции _on_key_pressed(). Вместо этого godot сохраняет определенные действия, например, стрельба, ходьба, прыжок, в виде входных карт, которые могут быть привязаны к определенным клавишам (их может быть более одной). Затем для обнаружения действия в коде есть три функции:

  1. Input.is_action_just_pressed(NameOfAction) — нажатие одной клавиши
  2. Input.is_action_pressed(NameOfAction) — определяет, удерживается ли клавиша
  3. Input.is_action_just_pressed(NameOfAction) — определяет, отпущена ли клавиша

Эти функции можно использовать для обнаружения ввода игрока в скрипте.

ПРИМЕЧАНИЕ. В каждом проекте Godot уже хранится множество действий пользовательского интерфейса по умолчанию, например ui_up для стрелки вверх. Если вам нужны пользовательские действия или входные данные, вы можете перейти в «Настройки проекта» -> «Карты ввода», добавить действия и добавить определенную клавишу, щелчок мыши или движение джойстика.

ПРИМЕР ПРОЕКТА:

  1. Открыть новый проект

  2. Перейдите в Настройки проекта -> Входные карты.

  3. В текстовом поле введите «стрелять» и нажмите «ВВОД» или нажмите «ДОБАВИТЬ».

  4. Добавьте пробел к этому действию

  5. Добавить новую сцену со сценарием

  6. В скрипте пишем-

            if Input.is_action_pressed("shoot"):
        #Code for shoot mechanic
        pass
    

Существует несколько способов регистрации ключей:

      -is_key_pressed("Enter")
-Input.is_action_pressed(*action*)

Я бы использовал Input.is_action_pressed(), потому что он позволяет вам работать с менеджером ввода.

Если вы планируете использовать Input или _Input(событие), важно войти в настройки своего проекта и связать свои ключи.

Другие вопросы по тегам