在A.P.I期间godot无效获取索引'-1'(在基数'array')

时间:2018-11-30 23:23:52

标签: arrays godot gdscript

我正在制作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")

要注意的一件事是它确实显示了对话框和名称,之后我就立即得到该错误。

1 个答案:

答案 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()