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")
我正在尝试在脚本中保存游戏对象 (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")