在 A.P.I 期间,godot 无效获取索引“-1”(基于 'array')
godot invalid get index '-1'(on base 'array') during A.P.I
我正在制作 A.P.I。显示对话、选择、精灵、音频等,我在 youtube 上查看此视频后能够做到这一点,但我一直收到此错误 invalid get '-1' (on base 'array')
这是我的代码,所以你可以看到
extends Control
onready var bg_rect = get_node("Media_Sys/BG_Rect")
onready var char_sprite = get_node("Media_Sys/Sprite")
onready var text_box = get_node("Dialog_Sys/Dialog_Text")
onready var text_nam = get_node("Dialog_Sys/Label/Name")
onready var click = get_node("ClickManager")
var player = []
var lu = "Lu"
var ciel = "Ciel"
func _ready():
click.request_ready()
func write(char_name_str, text_str=null):
if text_str == null:
text_str = char_name_str
char_name_str = ""
player.push_front({"type": "dialogue","name": char_name_str, "text": text_str})
func write_component():
text_nam.clear()
text_box.clear()
text_nam.add_text(player[player.size() - 1]["name"])#the debugger says the problem is here
text_box.add_text(player[player.size() - 1]["text"])#as well as here if you remove the first line.
player.pop_back()
func _input(event):
if event is InputEventMouseButton:
write_component()
有人说这是因为我没有定义数组的大小,有人说我的代码以某种方式将播放器设置为整数真的很奇怪。我已经为此检查了数组文档页面,但一无所获,我更改了代码中的一些小东西,但它仍然会产生同样的无效错误。
extends Node
onready var g = get_parent()
var lu = "Lu"
var ciel = "Ciel"
func _ready():
g.write(lu, "hello")
需要注意的一件事是它确实显示了对话和名称,我只是在之后立即收到错误消息。
您将 player 变量初始化为空列表。然后,在 write_component 中,您尝试使用计算出的索引 [player.size() - 1] 访问此列表。问题是,如果播放器为空,这将以 [0-1] 或 [-1] 作为索引结束,这在 GDScript 中是无效的。您的代码假定 Write 将首先被调用(有时可能会),以便播放器在 write_component[=21 时不为空=] 被调用。
最直接的解决方案是在尝试访问最后一个元素之前检查是否 player.size() == 0。
func write_component():
text_nam.clear()
text_box.clear()
if player.size() > 0:
text_nam.add_text(player[player.size() - 1]["name"])
text_box.add_text(player[player.size() - 1]["text"])
player.pop_back()
我正在制作 A.P.I。显示对话、选择、精灵、音频等,我在 youtube 上查看此视频后能够做到这一点,但我一直收到此错误 invalid get '-1' (on base 'array')
这是我的代码,所以你可以看到
extends Control
onready var bg_rect = get_node("Media_Sys/BG_Rect")
onready var char_sprite = get_node("Media_Sys/Sprite")
onready var text_box = get_node("Dialog_Sys/Dialog_Text")
onready var text_nam = get_node("Dialog_Sys/Label/Name")
onready var click = get_node("ClickManager")
var player = []
var lu = "Lu"
var ciel = "Ciel"
func _ready():
click.request_ready()
func write(char_name_str, text_str=null):
if text_str == null:
text_str = char_name_str
char_name_str = ""
player.push_front({"type": "dialogue","name": char_name_str, "text": text_str})
func write_component():
text_nam.clear()
text_box.clear()
text_nam.add_text(player[player.size() - 1]["name"])#the debugger says the problem is here
text_box.add_text(player[player.size() - 1]["text"])#as well as here if you remove the first line.
player.pop_back()
func _input(event):
if event is InputEventMouseButton:
write_component()
有人说这是因为我没有定义数组的大小,有人说我的代码以某种方式将播放器设置为整数真的很奇怪。我已经为此检查了数组文档页面,但一无所获,我更改了代码中的一些小东西,但它仍然会产生同样的无效错误。
extends Node
onready var g = get_parent()
var lu = "Lu"
var ciel = "Ciel"
func _ready():
g.write(lu, "hello")
需要注意的一件事是它确实显示了对话和名称,我只是在之后立即收到错误消息。
您将 player 变量初始化为空列表。然后,在 write_component 中,您尝试使用计算出的索引 [player.size() - 1] 访问此列表。问题是,如果播放器为空,这将以 [0-1] 或 [-1] 作为索引结束,这在 GDScript 中是无效的。您的代码假定 Write 将首先被调用(有时可能会),以便播放器在 write_component[=21 时不为空=] 被调用。
最直接的解决方案是在尝试访问最后一个元素之前检查是否 player.size() == 0。
func write_component():
text_nam.clear()
text_box.clear()
if player.size() > 0:
text_nam.add_text(player[player.size() - 1]["name"])
text_box.add_text(player[player.size() - 1]["text"])
player.pop_back()