Queue_free() 在启动时立即运行,而不是在触发时运行

Queue_free() runs immediately on start instead of on trigger

在我的游戏中,我有一个玩家精灵,它有一个碰撞区域。

我游戏中的草也有碰撞形状。

草本应在与玩家精灵碰撞时产生效果,但是,当我 运行 游戏时,草立即 运行 产生效果并消失了。 当我注释掉 queue_free() 时,草会产生应有的效果(碰撞时)

extends Node2D

func create_grass_effect():
        var GrassEffect = load("res://Effects/GrassEffect.tscn")
        var grassEffect = GrassEffect.instance()
        var world = get_tree().current_scene
        world.add_child(grassEffect)
        grassEffect.global_position = global_position

func _on_Hurtbox_area_entered(area):
    create_grass_effect()
    queue_free()
    print('test')

控制台输出:

测试

测试

测试

测试

(每个草节点的每个测试)

如果需要,我可以提供更多游戏代码。

请记住,我是一名新游戏开发者,这是来自教程。

来自 Heartbeast 的艺术作品 https://www.youtube.com/c/uheartbeast

编辑:

我安慰变量区,结果是这样的:

[Area2D:1364]
[Area2D:1344]
[Area2D:1372]
[Area2D:1368]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]
[Area2D:1339]

1339 是在游戏中触及草地时,开始时的数字自动为 运行 当游戏为 运行

另一个编辑:

当在播放器中禁用碰撞时,草仍然有效并且可以自由排队

编辑 3:

禁用草丛中的碰撞会导致草丛正常运行,除非您无法与之碰撞

我不确定为什么,但将信号从 area_entered 更改为 body_shape_entered 似乎有效。