8
votes

I am studying the Godot Engine and GDScript and I searched on the internet about keyboard events, but I didn't understand. Is there something in Godot like: on_key_down("keycode")?

4

4 Answers

10
votes

You can use InputEvent to check for specific Keys.

Check out the documentation: http://docs.godotengine.org/en/stable/learning/features/inputs/inputevent.html

10
votes

Godot versions 3.0 and up have new input-polling functions that can be used anywhere in your scripts:

  • Input.is_action_pressed(action) - checks if the action is being pressed
  • Input.is_action_just_pressed(action) - checks if the action was just pressed
  • Input.is_action_just_released(action) - checks if the action was just released
3
votes

There's no official OnKeyUp option, but you can use the _input(event) function to receive input when an action is pressed/released:

func _input(event):

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

Actions are set in Project Settings > Input Map.

Of course you don't always want to use _input, but rather get inputs within the fixed updates. You can use Input.is_key_pressed() but there's no is_key_released(). In that case you can do this:

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

That's what I've been using. Feel free to inform me if there's a better way to do OnKeyUp in Godot.

0
votes

If you're considering using Input or _Input(event), it's important you go into your project settings and bind your keys.