Godot3中connect()函数失效求助:制作灌木丛消失效果遇阻
解决Godot 3中connect()函数无效的问题
核心问题分析
你提到脚本不属于待回收节点的自有脚本,这说明你用self.connect是错误的——self指向的是当前脚本挂载的节点,而非要销毁的灌木丛(AnimatedSprite2D)节点,信号自然无法触发。
解决方案
1. 正确获取目标节点并连接信号
假设待回收的AnimatedSprite2D是当前脚本挂载节点的子节点(名称设为Bush),修正代码如下:
func _ready(): # 获取目标灌木丛节点 var bush_node = $Bush # 连接信号:目标节点的animation_finished信号触发时,调用当前脚本的回调函数 bush_node.connect("animation_finished", self, "_on_bush_animation_finished", [bush_node]) bush_node.frame = 0 bush_node.play("Animate") # 回调函数接收目标节点作为参数,执行销毁 func _on_bush_animation_finished(target_node): target_node.queue_free()
2. 关键排查点
- 检查动画是否循环:如果
Animate动画开启了Loop(动画编辑器里的勾选框),animation_finished信号永远不会触发,必须取消循环。 - 节点路径正确性:用
print(bush_node)输出节点信息,确认是否获取到有效节点,避免空引用。 - 动画名称匹配:确保
play("Animate")中的名称和动画编辑器里的动画名称完全一致(大小写敏感)。
3. 脚本挂载在目标节点上的特殊情况
如果你误解了“自有脚本”的意思,脚本其实是挂在AnimatedSprite2D上的,那可以简化代码,同时排查动画循环问题:
func _ready(): frame = 0 play("Animate") # 用匿名函数直接连接,更简洁 connect("animation_finished", func(): queue_free())
内容的提问来源于stack exchange,提问作者DaPOPs
相关产品推荐
相关产品推荐

