首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的游戏场景出现错误,而主场景实际上是Godot中的菜单

为什么我的游戏场景出现错误,而主场景实际上是Godot中的菜单
EN

Stack Overflow用户
提问于 2021-08-21 15:14:05
回答 1查看 167关注 0票数 0

我正在给我的游戏添加一个主菜单。我正在做的事情是将它们添加到场景中,然后将场景更改为游戏场景。然而,我的游戏有属于其他场景的错误,这些场景在现有场景中没有实例。我得到的错误信息如下:

代码语言:javascript
运行
复制
Invalid get index 'HasEntered' (on base: 'null instance').

我的整个项目都在这里:https://github.com/Ripple-Studios/Godot-Wild-Jam-36-Game-Ripple-Studios

如果有人能帮我,我将不胜感激。

谢谢,

EN

回答 1

Stack Overflow用户

发布于 2021-08-21 18:22:11

我看了一下链接的代码。

正在发生的事情是,获取父节点的做法又回来咬你了。我说的代码看起来像这样:

代码语言:javascript
运行
复制
get_parent().get_node(...)

您在主场景(MainMenu.tscn)中实例化了一个场景(HospitalScene.tscn),其代码类似于上图所示。

您提到的特定错误来自如下代码:

代码语言:javascript
运行
复制
func _on_Area2D_body_entered(body):
    var HospitalPosition = get_parent().get_node("Hospital")

    
    if HospitalPosition.HasEntered == true:
        HospitalPosition.isInHospital = false

此代码在开始时触发,因为Area2DStaticBody__重叠。

代码正在尝试获取场景树中不存在的同级"Hospital"。因此HospitalPosition为空。当HospitalPosition为null时,尝试访问HospitalPosition.HasEntered会导致您提到的错误:

代码语言:javascript
运行
复制
Invalid get index 'HasEntered' (on base: 'null instance').

场景正在尝试到达自身外部的节点。并且不能保证场景将在这样的节点可用的地方被实例化。因此,在get_parent().get_node(...)的每一种情况下,都可能发生这种情况。

事实上,在运行游戏时,我得到了四个错误,看起来像这样(但路径不同):

代码语言:javascript
运行
复制
E 0:00:01.494   get_node: (Node not found: "Hospital" (relative to "/root/CanvasLayer/ParentSprite/Control").)
  <C++ Error>   Condition "!node" is true. Returned: nullptr
  <C++ Source>  scene/main/node.cpp:1325 @ get_node()
  <Stack Trace> HospitalScene.gd:28 @ _on_Area2D_body_entered()

您可以使用get_node_or_null而不是get_node,并检查null

您还可以导出NodePath变量,而不是对路径进行硬编码。

与检查实例是否有效相比,更好的解耦策略包括:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68874274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档