You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 15:44:59