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

调用预加载fire脚本的FireActivate函数时出现Node未找到错误

解决FireActivate函数中"Node not found: AnimatedSprite2D"错误

错误原因

你当前代码直接实例化fire.gd脚本对应的StaticBody2D节点,但这个新创建的节点没有包含场景中定义的AnimatedSprite2D和FireTimer子节点——脚本只是节点的逻辑载体,场景才保存了完整的节点层级结构。另外,场景中已经存在Fire节点的情况下,完全不需要重新创建新实例,直接引用已有的节点即可。

修复步骤

1. 修正main.gd中Fire节点的引用方式

删除var fire = preload("res://fire.gd").new(),改为直接获取场景中已存在的Fire节点(路径根据你的实际场景结构调整,比如Fire是main节点的直接子节点):

extends Node2D

var fire = $Fire # 直接引用场景中已有的Fire节点

# 其余代码保持不变

2. (可选)如果需要动态创建Fire节点

如果确实需要动态生成Fire节点,必须加载对应的场景文件(而非仅脚本),并将实例添加到场景树中,确保子节点被初始化:

extends Node2D

var fire_scene = preload("res://fire.tscn") # 加载Fire场景文件
var fire

func _ready():
    fire = fire_scene.instantiate()
    add_child(fire) # 将节点添加到场景树,子节点才会存在

# 其余代码保持不变

3. 简化fire.gd中的冗余判断

FireActivate函数内的if FireHit判断完全多余,因为前面已经设置FireHit = true,可以简化代码:

extends StaticBody2D

var FireHit = false
    
func FireActivate(collision):
    if collision.get_collider().name.begins_with("Fire"):
        FireHit = true
        $AnimatedSprite2D.play("hit")
        $AnimatedSprite2D.play("on")
        $FireTimer.start(3)

func _on_timer_timeout():
    $AnimatedSprite2D.play("off")
    FireHit = false

内容的提问来源于stack exchange,提问作者Ahsan914

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:48:22