【问题标题】:Attempt to call function 'get_position' in base 'null instance' on a null instance. ERROR尝试在空实例的基础“空实例”中调用函数“get_position”。错误
【发布时间】:2019-08-12 22:50:08
【问题描述】:

我正在尝试创建一个自上而下的射击游戏,其中包含一个玩家和一个单独场景中的子弹。但是每当我运行游戏时,它都会说

尝试在空实例的基础“空实例”中调用函数“get_position”。

顺便说一句,我是 Godot 的新手。
问题似乎出在这个函数上:

const SPEED = 300
var bullet = preload("res://Mini-Scenes/Bullet.tscn")

func shoot():
    var b = bullet.instance()
    add_child(b)
    b.set_position(position)
    b.move_and_slide(Vector2(1, 0).rotated(rotation) * SPEED)

而且我也不认为我了解实例化的工作原理,
所以我的问题是:

  1. 实例化是如何工作的?
  2. 是什么导致上述函数失败?

【问题讨论】:

  • 我也是新手,最近也遇到了类似的问题,我尝试一起创建播放器和主场景,我认为如果父节点是Node2D(通常是地图一)。能否尝试将射击功能移至子弹或玩家场景?
  • Attempt to call function 'get_position' in base 'null instance' on a null instance 表示引擎无法找到您的请求。尝试将您的 var bullet 更改为 onready var bullet。如果还是不行,试试把b.set_position(position)改成b.position = position。
  • 我把Node2D改成Node,还是不行。
  • 我忘了提...如果我的上述建议都不起作用,请尝试使用get_parent().add_child(b)添加项目符号

标签: godot gdscript


【解决方案1】:

好的,按顺序:

  1. 实例化原则上很简单。 Godot 获取场景及其所有子场景的基础Node,并将它们复制并粘贴到内存中。然后,当您将这个 Node 作为孩子添加到场景中的另一个时,_ready 被调用,Nodes 开始到 _process 和 _physics_process,以及其他一些事情,如接收事件(如Node 必须在 SceneTree 内才能与其他节点交互,将一个添加到树中的最常见方法是使其成为另一个的子节点。

有关详细信息,请参阅documentation on Instancing

  1. 上述功能实际上完美无缺,我刚刚在 Godot 3.1.1 中创建了一个新项目并复制了您的设置,没有出现错误。问题必须在您的代码或场景设置中的其他地方,我们需要查看您的完整脚本和场景布局以确定问题的原因。如果您使用该信息更新您的问题,或者在 Discord (Mantissa#2558) 上向我发送消息,我将能够全面回答您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多