1

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

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

1 回答 1

0

好的,按顺序:

  1. 实例化原则上很简单。Godot 获取Node场景的基础及其所有子节点,并将它们复制并粘贴到内存中。然后,当您将其作为子节点添加Node到场景中的另一个时,调用_readysNode开始_process和将一个添加到树中的最常见方法是使其成为另一个的孩子)。_physics_processNodeSceneTree

有关更多信息,请参阅有关实例化的文档

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