0 votes

Really simple here, I am just trying to learn godot.

I am learning the particle, and wish to create them while pressing a key (easy) but can't manage to free them while releasing the same key.

here is the code

var is_flamethrowing = false

onready var fire_particle = preload("res://fire_particle.tscn")

func _fixed_process(delta):
    if(Input.is_action_pressed("space_bar")):
        fire = fire_particle.instance()
        add_child(fire)
        is_flamethrowing = true
    if(/* TRYING TO RELEASE HERE */):
        remove_child(fire)
        fire.queue_free()
        is_flamethrowing = false

I already tried other thing, such as Input.actionreleased().
I know my freeing code work, i tested with an other input. I am just surprised that Godot doesn't implement an "is
action_released()" method.

asked Nov 14, 2017 in Engine by mmarramarco (32 points)

1 Answer

+1 vote
Best answer

Your code creates an instance in every frame if the space_bar is pressed.
IMO it would be better to have only one instance, and you can call it's set_emitting function with true/false parameter when necessary (I assume that the root node of the fire_particle scene is a Particles/Particles2D).

If you really need multiple instances, then put them in a list, and you can free them later.

About your question: try to use the _input function, and it's event parameter!
Something like this:

(...)
onready var fire_particle = preload("res://fire_particle.tscn")
onready var fire = fire_particle.instance()

var is_flamethrowing = false

func _ready():
    fire.set_emitting(false)
    add_child(fire)
    set_fixed_process(true)
    set_process_input(true)

func _input(event):
    if(event.is_action_pressed("space_bar")):
        is_flamethrowing = true
    elif(event.is_action_released("space_bar")):
        is_flamethrowing = false

func _fixed_process(delta):
    if(is_flamethrowing):
        fire.set_emitting(true)
    else:
        fire.set_emitting(false)
(...)
answered Nov 14, 2017 by bruteforce (646 points)
selected Nov 14, 2017 by mmarramarco

I figured out alone for the func input(event), thanks anyway ^^ I just don't get why I have to do that with another function while is action released can work everywhere. Thanks also for the particle part, I ll try that right away, I am still learning it.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.