Godot 获取索引 'x' 无效(在 Base 上:'Node (a.gd)')

Godot Invalid to get index 'x' (On Base: 'Node (a.gd)')

我正在尝试在脚本中保存游戏对象 (bat.tscn) 的路径,并使用它来实例化来自不同脚本的对象。保存变量的脚本名称称为 a.gd,负责实例化的脚本名称为 b.gd,变量名称为 x。但出于某种原因,每次我尝试使用该变量时,它都会给我一个错误;

Invalid to get index 'x' (On Base: 'Node (a.gd)')

a.gd;

func _process(delta):
var SlotOne = $"res://Objects/Weapons/Bat.tscn

b.gd;

onready var InvManager = get_node("../a") #gets the script.

func _physics_process(delta):
    changeWeapons()

func changeWeapons():
    if Input.is_key_pressed(KEY_1):
        load(InvManager.SlotOne)
    elif Input.is_key_pressed(KEY_2):
        print("2")
    elif Input.is_key_pressed(KEY_3):
        print("3")
    elif Input.is_key_pressed(KEY_4):
        print("4")    

有什么办法可以解决这个问题吗? 我对游戏引擎还很陌生,所以有点卡在这里。

另一种可能的解释是,您没有使用或实例化您尝试访问的节点

所以首先尝试像这样将节点添加到主场景

get_tree().current_scene().add_child("#the path to a.gd")

但无论如何只有代码可以告诉我们哪里出了问题

您似乎在 _process 中声明了 SlotOne。这使它成为局部变量。换句话说,这个变量只能在 _process 内部可用,因此,您无法从另一个脚本访问它。

在任何方法之外定义您希望从其他脚本访问的变量 (func) - 语言指南鼓励将它们放在文件开头附近,在任何方法之前。

好吧,看起来你只是在加载场景而不是实例化它

这可能有帮助

首先确保 a.gd 是自动加载脚本

然后而不是像这样写 a.gd

func _process(delta):
    var SlotOne = $"res://Objects/Weapons/Bat.tscn

这样写

 extends node

 const SlotOne= preload("res://Objects/Weapons/Bat.tscn")

然后写在 b.gd

func _physics_process(delta):
changeWeapons()

func changeWeapons():
    if Input.is_key_pressed(KEY_1):
        var Bat_instance = A.SlotOne.instance()
        Bat_instance.position = Vector_2() #some position
        self.add_child(Bat_instance)
    elif Input.is_key_pressed(KEY_2):
        print("2")
    elif Input.is_key_pressed(KEY_3):
        print("3")
    elif Input.is_key_pressed(KEY_4):
        print("4")