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

时间:2019-08-12 22:50:08

标签: godot gdscript

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

  

试图在空实例的基础“空实例”中调用函数“ 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. 是什么使上述功能失败?

1 个答案:

答案 0 :(得分:0)

好的,按顺序:

  1. 实例化原则上很简单。 Godot将场景及其所有子级的Node作为基础,然后将其复制并粘贴到内存中。然后,当您将此Node作为子级添加到场景中的另一个子级时,将调用_readyNode也开始分别为_process_physics_process就像其他一些事情一样,例如接收事件(因为Node必须在SceneTree内才能与其他节点进行交互,而最常见的将一棵树添加到树中的方法是使其成为树的子节点另一个)。

有关更多信息,请参见documentation on Instancing

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