【问题标题】:Sprite node suddenly not found Godot精灵节点突然找不到Godot
【发布时间】:2021-04-10 08:58:09
【问题描述】:

我将我的播放器添加为单例,现在 Godot 找不到它的精灵节点。当我尝试移动时游戏崩溃并给我一个“get_node: Node not found: Sprite”。错误。有谁知道该怎么做?

【问题讨论】:

  • 单例是一个 kinematicbody2D,我正在尝试访问它的子节点 Sprite(animated_sprite),每当我输入 kinematicbody2D 的脚本时,它会说 Sprite 可以找不到
  • 能否包含脚本的相关部分和层次结构的屏幕截图?

标签: godot gdscript


【解决方案1】:

如果你所说的“单例”是指AutoLoad,请注意这个概念是作为存储场景独立或场景间信息的解决方法引入 Godot 的。正如文档所说:

自动加载脚本时,将创建一个节点并将脚本附加到它。此节点将在加载任何其他场景之前添加到根视口。

据我从您的问题中了解到,Sprite 节点是一个节点的子节点,该节点附加了一个带有一行代码的脚本,类似于

self.get_node("Sprite")...

但是当你AutoLoaded 这个脚本时,你实际上引入了一个新节点作为根视口的子节点,并且这个节点不继承具有Sprite 子节点的“原始”节点的树结构。它只附加了与原始节点相同的脚本。同样通过AutoLoad 名称引用将引用这个新对象(没有Sprite 子对象)而不是您原来的对象。

我认为您想要做的是提供一种跨场景方式来引用该特定节点(具有其Sprite 子节点)。我建议以干净的方式查看Godot's Groups。将您的节点放入特定组,然后从该组请求它:

theNode.add_to_group("MyPublicNodes")

# Get that node somewhere and get its `Sprite` child
get_tree().get_nodes_in_group("MyPublicNodes")[0].get_node("Sprite")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多