how can i restart a child

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By i.want.to.die

i have a code to spawn a pillar to damage the player on the player’s position
here is the code of the spawner
node2D:

extends Node2D

var child_position
var current_pillars = 0
var pillar = preload("res://plant pillar.tscn").instance()

func _on_Timer_timeout():
    child_position = get_node("Position2D").position.x
    $".".position.x = child_position
    add_child(pillar)
    current_pillars + 1

    position2D:
        extends Position2D
        var pillar = preload("res://plant pillar.tscn").instance()

        func _process(delta):
            position.x = get_parent().get_parent().get_node("player").position.x

and here is the code for the pillar:

extends Area2D
var damage = 30
func _ready():
    $Sprite.play('growing')
func _on_plant_pillar_body_entered(body):
    if body.is_in_group("players"):
	    body.on_hit(damage)
func _on_Sprite_animation_finished():
    $Sprite.play('full_grown')
    $CollisionShape2D.disabled = false
    $Timer2.start()
func _on_Timer2_timeout():
    $".".queue_free()

the biggest problem is that after the pillar is spawned for the first time he does not goes true the animation and so is already spwaned fully grown and the collision is set to true,
thank you

:bust_in_silhouette: Reply From: njamster

You should get an error on every timeout after the first:

add_child: Can't add child [...] to [...], already has a parent [...]

If you want to add multiple pillars, you need to create multiple instances of it:

var pillar = preload("res://plant pillar.tscn")

func _on_Timer_timeout():
    # ...
    var new_pillar = pillar.instance()
    add_child(new_pillar)
    # ...

However, you’re reusing the same instance over and over again!

i absolutly love this community , thank you very much

i.want.to.die | 2020-04-22 21:38