我正在制作A.P.I.显示对话,选择,子画面,音频等。在youtube上观看此视频后,我能够做到这一点,但我不断收到此错误invalid get '-1' (on base 'array')
,这是我的代码,因此您可以看到< / p>
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")
要注意的一件事是它确实显示了对话框和名称,之后我就立即得到该错误。
答案 0 :(得分:0)
您将 player 变量初始化为一个空列表。然后,在 write_component 中,您尝试使用计算出的索引 [player.size()-1] 访问此列表。问题是,如果播放器为空,则最终以[0-1]或[-1]作为索引,这在GDScript中无效。您的代码假定将首先调用 Write (有时可能会调用),以便在调用 write_component 时播放器不为空。
最直接的解决方案是在尝试访问最后一个元素之前检查 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()