Godot недопустимо получить индекс '-1' (на базе 'массив') во время API - PullRequest
0 голосов
/ 01 декабря 2018

Я делаю API, который отображает диалоги, варианты, спрайты, аудио и т. Д. И т. Д., Я смог сделать это после просмотра этого видео на 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")

Одна вещь, которую нужно отметить, эточто он отображает диалог и имя, я сразу же получаю сообщение об ошибке.

1 Ответ

0 голосов
/ 07 декабря 2018

Вы инициализируете переменную player пустым списком.Затем в write_component вы пытаетесь получить доступ к этому списку с вычисленным индексом [player.size () - 1] .Проблема в том, что если игрок пуст, это заканчивается как [0-1] или [-1] как индекс, что недопустимо в GDScript.Ваш код предполагает, что Запись будет вызвана первой (и может быть, иногда), чтобы проигрыватель не был пуст к моменту вызова 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()
...