Introdução aos Arrays

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Estruturas de dados são como codificadores armazenam e organizam conjuntos inteiros de dados. No Lua, estruturas de dados são criadas com tabelas. Tabelas podem conter qualquer número de valores.

Este artigo cobre o uso de matrizes , um digitarespecífico de tabela, para criar um personagem falante.

Mesas

As tabelas são tipos de dados que podem conter vários valores. Ao contrário de outros tipos de dados que armazenam um único valor, as tabelas não têm um tamanho fixo e podem conter uma mistura de diferentes tipos de valores. Com as tabelas, você pode armazenar itens no inventário de um jogador ou criar uma lista de milhares de nomes de jogadores.

Matrizes

Existem diferentes tipos de tabelas. Um tipo é uma matriz **** , que armazena listas de valores em uma ordem específica. Para criar uma matriz / lista, crie uma variável e atribua-lhe colchetes { }. Separe os valores entre colchetes com vírgulas como abaixo:

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

Criando um Personagem Falante

Para explorar matrizes, você vai trabalhar com um personagem não jogável (NPC) que, quando clicado, mostra uma linha de diálogo diferente.

Este projeto usará um modelo NPC pré-fabricado, que inclui um script parcial e um Detector de Prompt, mas carece de diálogo.

  1. Faça o download do modelo NPC.

  2. No Explorador, importe o NPC clicando com o botão direito do mouse em Workspace > Insert From File e selecionando o arquivo baixado.

Esses passos usam uma matriz para armazenar diferentes frases para o NPC dizer quando os jogadores interagem com ele.

  1. No Explorer , vá para NPC > ProximityPrompt > ChatManager.

  2. No ChatManager, onde marcado no script, crie uma matriz vazia **** para armazenar opções de diálogo.


    -- Cicla através do diálogo de bate-papo quando o prompt é usado
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Adicionar matriz aqui
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. Dentro dos parênteses {} da matriz recém-criada, digite pelo menos três cadeias de diálogo, separadas por vírgulas.


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

Usando Índices de Arrays

Cada valor na matriz é atribuído um número index. Os índices são atribuídos a valores na ordem em que os valores são armazenados. O primeiro valor está no índice 1, o segundo no índice 2 e assim por diante.

Algumas linguagens de codificação, como Java, começam os índices em 0.

Na matriz recém-criada, "Hi" está no índice 1 e "Goodbye!" está no índice 3.

ÍndiceValor
1 vezHola
2 veces¡Hoy es un gran día!
3 veces¡Adiós!

Usando Valores de Índice Específicos

Use valores de índice para atribuir partes específicas de diálogo ao NPC. Para usar um valor em um índice específico, adicione o índice entre colchetes diretamente após o nome da matriz / lista, como dialogueArray[1] .

  1. Substitua o valor padrão da string da variável dialogue pelo índice 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Playtest e clique no NPC. O segundo valor da matriz deve aparecer na bolha de bate-papo. Tente alterar o código para testar cada valor na tabela.

Quando o jogador interage com o NPC, o NPC sempre dirá a mesma linha. Isso é chato. Em vez disso, use uma variável para atualizar qual valor de índice usar.

Sempre que um jogador interage com o NPC, aumente o valor da variável em 1 para exibir a próxima linha de diálogo.

  1. Para acompanhar o índice atual, adicione uma nova variável chamada dialogueIndex . Defina a variável para 1 para começar no início da matriz / lista.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. Em speak() , substitua o número do índice em dialogueArray[2] com a variável que você acabou de criar.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Na parte inferior da função, adicione 1 a dialogueIndex . Na próxima vez que speak() for chamado, a caixa de diálogo exibirá a próxima string / cadeia / texto.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Jogue o teste e clique no NPC para ver cada cadeia de diálogo da matriz / lista.

Observe que há um erro **** na Janela de Saída quando o script chega ao final da matriz / lista.

Você vai consertar isso na próxima seção para que o diálogo reinicie do começo depois de mostrar a última string / cadeia / texto.

Tamanhos da Matriz

Você pode usar o tamanho da matriz para saber quando redefinir o índice desejado para 1. Encontre o tamanho **** de uma matriz digitando # , sem espaços, antes do nome da matriz / lista.

Por exemplo: #dialogueArray

Verifique o tamanho da matriz / listaem relação ao valor atual da variável para saber quando é hora de começar de novo no começo.

Use o tamanho da matriz para verificar quando é hora de voltar ao primeiro diálogo.

  1. Adicione uma declaração if e verifique se dialogueIndex é igual a #dialogueArray , o tamanho total desta matriz / lista. Se sim, defina dialogueIndex para 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 não estiver no terminar/parar/sair, ele ainda deve adicionar 1 a dialogueIndex . Mova dialogueIndex += 1 sob uma instrução else.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. Jogue e confirme que você pode recomeçar o diálogo.

Resumo

Estruturas de dados são como conjuntos de dados são armazenados. Lua usa tabelas para criar estruturas de dados. Matrizes são um tipo de tabela que pode conter listas ordenadas de informações. Cada valor dentro da matriz é atribuído um número de índice, começando com o índice 1.

Este script usou uma matriz para criar uma lista de possíveis linhas de diálogo para um personagem não jogável (NPC).

scriptconcluído

-- Cicla através do diálogo de bate-papo quando o prompt é usado
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Adicionar matriz aqui
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)

Dicas de solução de problemas

Se o personagem não passar pelo conjunto de diálogos, tente as seguintes dicas de solução de problemas.

  • Verifique a declaração if que dialogueIndex está definido como 1. Na declaração else, verifique se dialogueIndex tem 1 adicionado a si mesmo.
  • Ao obter o tamanho da matriz / lista, certifique-se de que não haja espaços após o # em #dialogueArray.

Desafios Opcionais

Tente um dos desafios opcionais abaixo.

  • Codifique o script para que o diálogo do NPC passe para trás através da matriz / lista. O dialogueIndex deve começar na matriz e subtrair cada vez em vez de adicionar.
  • Em vez de mostrar o diálogo em ordem, peça ao NPC que mostre uma linha aleatória de diálogo cada vez que usar Random.new(). Um script de exemplo está incluído abaixo para referência

local randomGenerator = Random.new()
-- Mostra um novo diálogo sempre que o NPC é clicado
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end