Intro sugli Arrays

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Le strutture dei dati sono il modo in cui i codici memorizzano e organizzano intere raccolte di dati. In Lua, le strutture dei dati vengono create con tabelle. Le tabelle possono contenere qualsiasi numero di valori.

Questo articolo tratta l'uso di array , un inserisci / scrividi tabella specifico, per creare un personaggio che parla.

Tabelle

Le tabelle sono tipi di dati che possono contenere più valori. A differenza di altri tipi di dati che memorizzano un singolo valore, le tabelle non hanno una dimensione fisica e possono contenere un mix di diversi tipi di valore. Con le tabelle, puoi memorizzare oggetti nell'inventario di un Giocatoreo creare una lista di migliaia di nomi di giocatore.

Matrici

Ci sono diversi tipi di tabelle. Un tipo è un array , che memorizza le liste di valori in un ordine specifico. Per creare un vettore, crea una variabile e assegnala curly brackets { } . Separate i valori all'interno dei brackets con virgole come segue:

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

Creare un personaggio parlante

Per esplorare gli array, lavorerai con un personaggio non giocabile (NPC) che, quando viene cliccato, mostra una diversa linea di dialogo.

Questo progetto userà un modello NPC pre-made, che include uno script parziale e Prompt Detector ma manca dialogo.

  1. Scarica il modello NPC.

  2. In Explorer, importa il NPC facendo clic con il pulsante destro del mouse su Workspace > Importa dal file e selezionando il file scaricato.

Questi passaggi utilizzano un array per memorizzare diverse frasi per il NPC da dire quando i giocatori interagiscono con esso.

  1. Nell' Explorer, vai a NPC > ProximityPrompt > ChatManager.

  2. In ChatManager, dove è contrassegnato nel script, crea un array vuoto per memorizzare le opzioni di dialogo.


    -- Cicli attraverso il dialogo di chat quando viene utilizzato
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Aggiungi array qui
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. All'interno dei brackets {} dell' array appena creato, scrivi almeno tre righe di dialogo, separate da virgole.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

Uso degli indici dell' array

Ogni valore nell' array è assegnato un numero index . Gli indici sono assegnati ai valori nell' ordine in cui i valori vengono memorizzati. Il primo valore è all' indice 1, il secondo all' indice 2 e così via.

Alcuni linguaggi di script, come Java, iniziano gli indici all'interno di 0.

Nell' array appena creato, "Hi" è all'indice 1 e "Goodbye!" è all'indice 3.

IndiceValore
1Ciao
2Oggi è una grande giornata!
3Arrivederci!

Uso di valori di indice specifici

Usa i valori di index per assegnare pezzi di dialogo specifici all'NPC. Per utilizzare un valore in un index specifico, aggiungi l'index in brackets direttamente dopo il nome dell'vettore, come dialogueArray[1] .

  1. Sostituisci il valore di serie della variabile dialogue con l'indice 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Prova e fai clic sul NPC. Il secondo valore dell' array dovrebbe apparire nella bolle di chat. Prova a cambiare il codice per testare ognuno dei valori nella tabella.

Quando il giocatore interagisce con il PNG, il NPC dirà sempre la stessa linea. Questo è annoiato. Invece, usa una variabile per aggiornare quale valore di indice usare.

Ogni volta che un giocatore interagisce con l'NPC, aumenta il valore dell'变量 di 1 per visualizzare la seguente linea di dialogo.

  1. Per tenere traccia dell'indice attuale, aggiungi una nuova variabile chiamata dialogueIndex . Imposta la variabile a 1 per iniziare all'inizio dell' vettore.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. In speak() , replace il numero di indice in dialogueArray[2] con la variabile che hai appena creato.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Nella parte inferiore della funzione, aggiungi 1 a dialogueIndex . La prossima volta che viene chiamata speak(), la finestra di dialogo visualizzerà la prossima Stringa.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Prova e fai clic sul NPC per vedere ogni singola stringa di dialogo dall' vettore.

Notice there's an errore in the Output Window once the script reaches the end of the vettore.

Lo risolverai nella prossima sezione in modo che il dialogo ricominci dal principio dopo aver mostrato l'ultima Stringa.

Dimensioni dell' array

Puoi usare la dimensione dell' array per sapere quando ripristinare l'indice desiderato a 1. Trova la dimensione # di un array facendo clic su # , senza spazi, prima del nome di un vettore.

Ad esempio: #dialogueArray

Controlla la dimensione dell' vettorecontro il valore attuale della variabile per sapere quando è ora di ricominciare dall'inizio.

Usa la dimensione dell' array per controllare quando è il momento di tornare alla prima parte della dialogazione.

  1. Aggiungi un if statement e controlla se dialogueIndex corrisponde a #dialogueArray , la dimensione totale di questo vettore. Se sì, allora imposta dialogueIndex su 1.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Se dialogueIndex non è alla Terminare, dovrebbe comunque aggiungere 1 a dialogueIndex . Muovi dialogueIndex += 1 sotto un'altra dichiarazione.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. Gioca e conferma di poter ciclicare attraverso e riavviare il dialogo.

Panoramica

Le strutture dei dati sono come set di dati vengono memorizzati. Lua usa tabelle per creare strutture dei dati. Gli array sono un tipo di tabella che può contenere liste ordinate di informazioni. Ogni valore all'interno dell' array viene assegnato un numero di indice, inizialmente con l'indice 1.

Questo script ha utilizzato un array per creare una lista di possibili righe di dialogo per un personaggio non giocabile (NPC).

scriptcompletato

-- Cicli attraverso il dialogo di chat quando viene utilizzato
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Aggiungi array qui
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)

Risolvere i problemi

Se il personaggio non passa attraverso l' array di dialogo, prova i seguenti suggerimenti di soluzione dei problemi.

  • Controlla la dichiarazione if che dialogueIndex non è impostato su 1. Nella dichiarazione else, controlla che dialogueIndex non abbia 1 aggiunto a se stesso.
  • Quando si ottiene la dimensione dell' vettore, assicurarsi che non ci siano spazi dopo il # in #dialogueArray .

Sfide opzionali

Prova una delle sfide opzionali seguenti.

  • Codifica lo script in modo che il dialogo NPC faccia il ritorno attraverso l' vettore. Il dialogoIndex dovrebbe iniziare dall' array e sottrarre ogni volta invece di aggiungere.
  • Invece di mostrare il dialogo in ordine, l'NPC mostra una riga di dialogo casuale ogni volta usando Random.new() . Un script di esempio è incluso qui sotto per fare riferimento

local randomGenerator = Random.new()
-- Mostra un nuovo dialogo ogni volta che viene cliccato il NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end