Introducción a los arrays

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Estructuras de datos son cómo los codificadores almacenan y organizan conjuntos completos de datos.En Luau, las estructuras de datos se crean con tablas. Tablas pueden contener cualquier número de valores.

Este artículo cubre el uso de arrays , un introducirde tabla específico, para crear un personaje hablante.

Tablas

Tablas son tipos de datos que pueden contener múltiples valores.A diferencia de otros tipos de datos que almacenan un solo valor, las tablas no tienen un tamaño fijo y pueden contener una mezcla de diferentes tipos de valor.Con tablas, puedes almacenar artículos en el inventario de un jugador o crear una lista de miles de nombres de jugadores.

Arreglos

Hay diferentes tipos de tablas.Un tipo es un array , que almacena listas de valores en un orden específico.Para crear un matriz/lista, crea una variable y asignale curly brackets { } .Separe los valores dentro de los paréntesis con comas como a continuación:

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

Crear un personaje hablante

Para explorar los arreglos, trabajarás con un personaje no jugable (PNJ) que, al hacer clic, muestra una línea de diálogo diferente.

Este proyecto usará un aplicación de modeladode NPC prefabricado que incluye un guión parcial y un detector de prompts, pero carece de diálogo.

  1. Descargue el modelo PNJ.

  2. En Explorer, importa el NPC haciendo clic derecho en espacio de trabajo > insertar desde el archivo y selecciona el archivo descargado.

Estos pasos usan un array para almacenar diferentes frases para que el NPC las diga cuando los jugadores interactúan con él.

  1. En el Explorador , vaya a NPC > ProximityPrompt > ChatManager.

  2. En ChatManager, donde se marcó en el script, crea un array vacío para almacenar las opciones de diálogo.


    -- Ciclos a través del diálogo de chat cuando se usa la solicitud
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Añade array aquí
    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 de los paréntesis {} del array acaba de crear, escribe al menos tres cadenas de diálogo, separadas por comas.


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

Usar índices de array

A cada valor en el array se le asigna un número index .Los índices se asignan a los valores en el orden en que se almacenan los valores.El primer valor está en el índice 1, el segundo en el índice 2, y así sucesivamente.

Algunos lenguajes de programación, como Java, comienzan los índices en 0.

En el array acaba de crear, "Hi" está en el índice 1, y "Goodbye!" está en el índice 3.

ÍndezValor
1Hi
2¡Hoy es un gran día!
3Adiós!

Usar valores de índice específicos

Usa los valores de índice para asignar piezas específicas de diálogo al PNJ.Para usar un valor en un índice específico, agregue el índice entre paréntesis directamente después del nombre del matriz/lista, como dialogueArray[1] .

  1. Reemplazar el valor predeterminado de la variable dialogue con el índice 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Prueba y haz clic en el PNJ. El segundo valor del array debería aparecer en la burbuja de chat. Intenta cambiar el código para probar cada valor en la tabla.

Cuando el jugador interactúa con el PNJ, el NPC siempre dirá la misma línea.Eso es aburrido.En cambio, utilice una variable para actualizar qué valor de índice usar.

Cada vez que un jugador interactúa con el PNJ, incrementa el valor de la variable en 1 para mostrar la siguiente línea de diálogo.

  1. Para realizar un seguimiento del índice actual, agregue una nueva variable llamada dialogueIndex. Establezca la variable en 1 para comenzar al comienzo del matriz/lista.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. En speak() , reemplazar el número de índice en dialogueArray[2] con la variable que acabas de crear.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Al final de la función, agregue 1 a dialogueIndex. La próxima vez que se llame speak(), el diálogo mostrará la siguiente cadena.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Prueba y haz clic en el NPC para ver cada cadena de diálogo desde el matriz/lista.

Nota que hay un error en la ventana de salida una vez que el script llegue al final del matriz/lista.

Resolverás esto en la siguiente sección para que el diálogo se reinicie desde el principio después de mostrar la última cadena.

Tamaños de array

Puedes usar el tamaño del array para saber cuándo restablecer el índice deseado a 1.Encuentra el tamaño de un array al escribir # , sin espacios, antes del nombre de un matriz/lista.

Por ejemplo: #dialogueArray

Compruebe el tamaño del matriz/listacontra el valor actual de la variable para saber cuándo es el momento de volver al principio.

Usa el tamaño del array para comprobar cuándo es el momento de volver a la primera pieza de diálogo.

  1. Añade una declaración if y comprueba si dialogueIndex iguala #dialogueArray , el tamaño total de este matriz/lista. Si es así, entonces establece dialogueIndex a 1.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Si dialogueIndex no está al finalizar, aún debería agregar 1 a dialogueIndex . Mueva dialogueIndex += 1 debajo de una declaración else.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
    end
  3. Juega y confirma que puedes recorrer y reiniciar el diálogo.

Resumen

Las estructuras de datos son cómo se almacenan conjuntos de datos.Luau usa tablas para crear estructuras de datos.Los arreglos son un tipo de tabla que puede contener listas ordenadas de información.Se asigna un número de índice a cada valor dentro del array, comenzando con el índice 1.

Este script utilizó un array para crear una lista de posibles líneas de diálogo para un personaje no jugable (PNJ).

scriptcompletado

-- Ciclos a través del diálogo de chat cuando se usa la solicitud
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Añade array aquí
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)

Consejos de solución de problemas

Si el personaje no pasa por el array de diálogo, prueba los siguientes consejos de solución de problemas.

  • Compruebe la declaración if que dialogueIndex se restablece a 1. En la declaración else, compruebe que dialogueIndex tiene 1 agregado a sí mismo.
  • Al obtener el tamaño del matriz/lista, asegúrese de que no haya espacios después del # en #dialogueArray.

Desafíos opcionales

Prueba uno de los desafíos opcionales a continuación.

  • Codifica el guión para que el diálogo del PNJvaya hacia atrás a través del matriz/lista.El índice de diálogo debe comenzar en el array y restar cada vez en lugar de agregar.
  • En lugar de mostrar diálogo en orden, haz que el NPC muestre una línea de diálogo aleatoria cada vez usando Random.new() .Un script de muestra se incluye a continuación para hacer referencia

local randomGenerator = Random.new()
-- Muestra un nuevo diálogo cada vez que se hace clic en el NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end